我使用的是 laravel lumen 框架 v8
并在以下网站上使用 jwt 身份验证
https://jwt-auth.readthedocs.io/en/develop/lumen-installation/
。
这是我在我的项目中使用的一些代码片段
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'jwt',
'provider' => 'users'
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
]
]
];
cofig/auth.php
我也在 bootstrap/app.php 和所有其他配置下注册了这个文件
这是我的控制器登录功能的样子
public function login(Request $request)
{
$email = $request->input('email');
$pass = $request->input('password');
$credentials = [
'email'=>$email,
'password'=>md5($pass)
];
dd( Auth::attempt($credentials));
//return response()->json($credentials);
if (! $token = auth('web')->attempt($credentials)) {
return response()->json(['error' => 'Unauthorizedsfwe'], 401);
}
return $this->respondWithToken($token);
}
我正在使用我现有的项目数据库,密码以以下形式存储 MD5 所以我也试过这种方式 像上面一样,但即使我也尝试使用直接哈希 MD5 登录但它仍然无法正常工作
但是当我尝试从 PHPMyAdmin 上的响应目录运行它时
return response()->json($credentials);
它有效但不适用于 auth('web')->attempt()
方法
答案 0 :(得分:0)
我记得当您将凭据传递给尝试方法时,您不应该对密码进行散列,它会处理密码散列。您可以在此处查看 EloquentUserProvider.php
的 validateCredentials
方法:https://github.com/laravel/framework/blob/574aaece57561e4258d5f9ab4275009d4355180a/src/Illuminate/Auth/EloquentUserProvider.php#L154-L159
它使用内置哈希器。
因此,您似乎需要覆盖默认哈希行为并使用 MD5 代替它。当我在 Stackoverflow 上搜索它时,我发现了这个:https://stackoverflow.com/a/44126955/1977031
它只是创建一个实现 MD5Hasher
的 Illuminate\Contracts\Hashing\Hasher
并使用 md5 来生成哈希。并将其注册到服务提供者中,以便在需要 MD5Hasher
Hasher
答案 1 :(得分:0)
感谢您的回答,我的答案基本上是我的代码会做什么。只需使用 md5 和另一次幼虫默认散列对我的密码进行两次散列,这是我的它不起作用也许我必须禁用散列或仅使用 MD5 覆盖默认散列
现在我直接尝试这样对我有用
public function login(Request $request)
{
$email = $request->input('email');
$pass = $request->input('password');
$credentials = [
'email'=>$email,
'password'=>md5($pass)
];
//return response()->json($credentials);
$user = User::where('email', $request->email)
->where('password',md5($request->password))->first();
if (! $token = Auth::login($user)) {
return response()->json(['error' => 'Unauthorizedsfwe'], 401);
}
return $this->respondWithToken($token);
}