将Laravel 5 Auth与自定义表字段名称一起使用


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字段。

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

THX;

实际上,我们可以在Eloquent模型中重写getter/setter,但我还没有在User模型上尝试过。

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

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

在你的情况下,低结构应该工作

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

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

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

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

AuthenticatesUsers是一个实际上具有登录过程的特性。

如果您只是想将用户表中的列名称从"电子邮件"更改为"您的列",

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

我们需要重写(?我实际上不是一个好的OOP开发人员),这个方法。

像这个

在loginController中,

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

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