将 Laravel 5 身份验证与自定义 table 字段名称一起使用?

Use Laravel 5 Auth with custom table field name?

错误信息是由于数据库中的字段不正确造成的。

QueryException in Connection.php line 620: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email' in 'where clause'

auth的默认字段和数据库字段不一样,我想在auth中使用数据库字段

例如:我的数据库中的email字段调用user_email,我想把数据库字段改成auth字段

那么,有什么办法可以做到这一点吗? 抱歉我的英语不好:)

谢谢;

您可以在控制器的 Auth::attemp 方法中设置您喜欢的任何列。

在你的情况下,下面的构造应该可以工作

Auth::attempt(['user_email' => $email, 'password' => $password]

实际上我们可以在 Eloquent 模型中覆盖 getter/setter,但我还没有在用户模型上尝试过。

class User extends Model{   
    .....
    // overriding getter & setter
    function getEmailAttribute() {
        return $this->attributes['user_email'];
    }

    function setEmailAttribute($value) {
        return $this->attributes['user_email']=$value;
    }
}

对于 Laravel 5.4 用户, 我阅读了一些参考资料以使其发挥作用,

https://medium.com/@simonhamp/why-and-how-to-override-laravel-s-built-in-auth-controller-methods-60f070897ac6

https://sujipthapa.co/blog/laravel-54-login-with-username-or-password

AuthenticatesUsers 是实际具有登录过程的特征。

如果您只是要将用户 table 中的列名称从 'email' 更改为 'your column',

public function username()
{
    return 'email';
}

我们需要重写(?我其实不是一个好的OOP开发者),这个方法

像这样

在登录控制器中,

use AuthenticatesUsers {
  username as username;
}

public function username()
{
    return 'YOUR COLUMN';
}

然后它就像重写 trait 中的 username() 方法一样工作。 干杯!