Laravel 8中如何使用password_new字段替代password实现用户认证
解决Laravel 8自定义密码字段认证的「Undefined index: password」错误
出现这个错误的核心原因是Laravel认证系统默认依赖password字段,改用password_new时,需要明确告知框架使用自定义字段,同时修正Auth::attempt的调用逻辑。
步骤1:修改User模型,指定认证密码字段
在app/Models/User.php中重写getAuthPassword方法,让框架验证时读取password_new字段的值:
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; // 其他模型代码... /** * 指定认证用的密码字段 * @return string */ public function getAuthPassword() { return $this->password_new; } }
步骤2:修正控制器中的Auth::attempt调用
原写法会让框架尝试查找默认的password字段,导致索引错误。正确的调用是将查询条件(邮箱)放在第一个参数,输入的明文密码放在第二个参数,「记住我」选项放在第三个参数:
public function store(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); if (Auth::attempt(['email' => $request->email], $request->password, $request->remember)) { $request->session()->regenerate(); return redirect()->intended(RouteServiceProvider::HOME); } return back()->withErrors(['error' => '登录失败,请重试。']); }
额外验证项
- 确保数据库
password_new字段存储的是哈希加密后的密码(创建用户时需用Hash::make($password)生成); - 视图表单无需修改,保持
name="password"的输入框即可,输入的密码会自动与password_new字段做哈希匹配。
内容的提问来源于stack exchange,提问作者Abaij
相关产品推荐
相关产品推荐

