Auth::attempt 总是返回 false,即使输入和哈希正确
Posted
技术标签:
【中文标题】Auth::attempt 总是返回 false,即使输入和哈希正确【英文标题】:Auth::attempt always return false even with proper input and hash 【发布时间】:2021-09-26 04:08:32 【问题描述】:我正在使用 laravel 流明框架 v8
并在以下网站上使用 jwt 身份验证
https://jwt-auth.readthedocs.io/en/develop/lumen-installation/
.
这是我在项目中使用的一些代码sn-p
<?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()
方法
【问题讨论】:
【参考方案1】:我记得当您将凭据传递给您不应该对密码进行哈希处理的方法时,它会处理密码哈希处理。您可以在这里查看EloquentUserProvider.php
的validateCredentials
方法:https://github.com/laravel/framework/blob/574aaece57561e4258d5f9ab4275009d4355180a/src/Illuminate/Auth/EloquentUserProvider.php#L154-L159
它使用内置哈希器。
因此,您似乎需要覆盖默认哈希行为并使用 MD5 代替它。当我在 *** 上搜索时发现:https://***.com/a/44126955/1977031
它只是创建一个实现Illuminate\Contracts\Hashing\Hasher
的MD5Hasher
并使用md5 进行哈希。并在服务提供者中注册,以便在需要Hasher
时为应用程序提供MD5Hasher
【讨论】:
感谢您的回答。我是 Laravel 的新手,所以我不知道它有帮助。要了解什么对我有用,我只是用我的新帖子***.com/a/68431054/16244846 来回答【参考方案2】:感谢您的回答,我的回答基本上是我的代码所做的。只需使用 md5 和另一个 time larval 默认哈希对我的密码进行双重哈希,这样我的密码就不起作用了,也许我必须禁用哈希或者只是用 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);
【讨论】:
以上是关于Auth::attempt 总是返回 false,即使输入和哈希正确的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Auth::attempt 在 Laravel 5.3 中总是返回 false?
Laravel 5 Auth::attempt() 总是返回 false