Laravel 11中Auth::attempt验证失败:提示密码未使用Bcrypt算法
Laravel 11 Auth::attempt 认证失败问题排查
问题描述
调用Auth::attempt($credentials)时认证失败,已参照Laravel 11官方认证文档操作。
已创建如下数据播种器:
$hashedPassword = Hash::make('password'); User::factory()->create([ 'name' => 'Admin User', 'login' => 'admin', 'password' => $hashedPassword, 'role' => 'Admin', ]);
数据库中密码已完成哈希存储(附PhpMyAdmin截图)。
登录逻辑代码如下:
public function loginUser(Request $request) { $credentials = $request->only('login', 'password'); if (Auth::attempt($credentials)) { $request->session()->regenerate(); return redirect()->intended('/'); } return back()->withErrors(['login' => 'Invalid login or password']); // Redirect back with error message }
即使数据库密码已哈希处理,仍返回认证错误,请问遗漏了什么?
排查方案
指定认证字段
Laravel默认以email作为认证的用户名标识,如果你使用login字段作为登录标识,需要在User模型中添加方法指定:public function username() { return 'login'; }也可以修改
config/auth.php配置文件,在providers.users节点中添加username参数:'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, 'username' => 'login', ], ],验证密码哈希有效性
可以通过Laravel Tinker执行Hash::check('password', $user->password)($user为查询到的Admin User实例),确认密码与哈希值是否匹配,排查哈希过程是否异常。检查请求参数
打印$credentials确认前端提交的login和password参数值正确,无拼写错误(比如将login写成username)。确认User模型的认证基础
确保User模型继承了Illuminate\Foundation\Auth\User类,或者引入了Illuminate\Auth\Authenticatabletrait,这是Laravel认证系统的必要条件:use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { // 模型属性及方法 }
内容的提问来源于stack exchange,提问作者l3mon_
相关产品推荐
相关产品推荐

