Laravel中数据库密码列为password_hash时,如何用Auth::attempt登录?
Laravel自定义登录密码字段实现方法
当然可以,你只需要在User模型中重写getAuthPassword()方法,指定返回自定义的密码字段值即可,和重写username()方法的思路一致。
具体代码示例:
namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { // 若已重写用户名字段,保留即可 public function username() { return '你的用户名字段名'; } // 重写密码字段逻辑 public function getAuthPassword() { return $this->password_hash; } }
完成模型修改后,Auth::attempt()就能正常使用了,调用时依然传入password作为输入密码的键名,框架会自动通过重写的方法获取数据库中的password_hash字段值进行验证:
if (Auth::attempt(['你的用户名字段名' => $request->username, 'password' => $request->password])) { // 登录成功后的业务逻辑 }
原理是Laravel的认证系统在验证密码时,会调用用户模型的getAuthPassword()方法获取存储的密码哈希值,所以重写该方法就能指定自定义的密码字段。
内容的提问来源于stack exchange,提问作者M Mahfouz
相关产品推荐
相关产品推荐

