使用 attempt 进行手动认证时,第一个参数中必须有 password 这个字段名吗?

文档中说使用 attempt 方法会先验证再匹配数据库密码,通过 debugBar 看到是进行数据库查询验证了 email 字段。
file

如果我把 password 改为 passwords,是会报错的。(数据库和代码中都改了)
file

想问一下,使用 attempt 必须使用 password 字段名吗?
也就是,假如数据库设计中不是用的 password,还能使用 attempt 进行验证吗?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

解决方法:在 User 模型中,重写 getAuthPassword() 方法,而在attempt 方法中照常使用 password 就可以。

public function getAuthPassword() {
     //这样数据库字段为 passwords 也是可以认证的。
      return $this->passwords;
 }

解决参照链接:
https://laracasts.com/discuss/channels/lar...

7年前 评论
讨论数量: 8

解决方法:在 User 模型中,重写 getAuthPassword() 方法,而在attempt 方法中照常使用 password 就可以。

public function getAuthPassword() {
     //这样数据库字段为 passwords 也是可以认证的。
      return $this->passwords;
 }

解决参照链接:
https://laracasts.com/discuss/channels/lar...

7年前 评论

那不是废话吗?你字段验证的是password你拿passwords去做验证,不报错报啥。

7年前 评论

你看明白再回复,我不是问的报错,是我故意弄的报错,问一下 attempt 方法默认第一个参数中是否必须有一个 password 字段。
@monanxiao

7年前 评论

@wubuwei 你改了那个字段验证不就可以不用这个参数了。

7年前 评论

@monanxiao 不太明白这个参数?假如数据库设计中不是用的 password,还能使用 attempt 进行验证吗?

7年前 评论

@wubuwei 可以,你要改attempt验证逻辑里面的字段。

7年前 评论

解决方法:在 User 模型中,重写 getAuthPassword() 方法,而在attempt 方法中照常使用 password 就可以。

public function getAuthPassword() {
     //这样数据库字段为 passwords 也是可以认证的。
      return $this->passwords;
 }

解决参照链接:
https://laracasts.com/discuss/channels/lar...

7年前 评论
控制器:
    public function login(Request $request)
    {
            $credentials = $this->validate($request, [
                //这个名字,数据库用户名是什么就写什么;
                'user_name' => 'required',
                //password 这个名字是固定写法,不要改变;
                'password' => 'required'
            ]);

            if (Auth::attempt($credentials)) {
                echo '登录成功';
            }else{
                echo '登录失败';
            }
    }

模型Model:
    namespace App\Http\Models;

    use Illuminate\Foundation\Auth\User as Authenticatable;

    class User extends Authenticatable
    {
        protected $primaryKey = 'user_id';
        public $timestamps = false;
        public function getAuthPassword() {
            return $this->user_pass;  //<---这里设置密码字段和数据库的一样
        }
    }

注意:
1. 编辑器全局搜索 App\User 替换为 App\Http\Models\User
2. 执行命令:$ php artisan config:cache
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!