Laravel 8.61.0 Auth::attempt报Undefined index: password错误排查
问题原因
Auth::attempt() 方法约定传入的凭证数组中必须包含password键,该键是Laravel身份验证系统固定读取的凭证键名,和你数据库中存储密码的字段名无关。你当前传的是password_hash键,系统读取不到password索引就会抛出对应的错误。
另外你提前对密码做哈希的操作也是多余的,Auth::attempt() 会自动将传入的明文密码做哈希运算,和数据库存储的哈希值做比对,提前哈希会导致二次哈希永远匹配不上验证。
修复方案
修改LoginController.php中authenticate方法的代码即可,你之前在User模型中通过getAuthPassword()指定从password_hash字段读取存储的密码哈希的逻辑是正确的,不需要修改:
public function authenticate(Request $request) { $request->validate([ 'username' => ['required'], 'password' => ['required'], ]); $user = [ 'username' => $request['username'], // 把键名改成password,传入明文密码即可 'password' => $request['password'] ]; if (Auth::attempt($user)) { $request->session()->regenerate(); return redirect()->intended('/'); } return back()->with('fail', 'Login fail'); }
内容的提问来源于stack exchange,提问作者Bear Au Jus - ジュースとくま
相关产品推荐
相关产品推荐

