簡體   English   中英

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

那么,有沒有辦法做到這一點? 抱歉我的英語不好:)

謝謝;

實際上我們可以在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 :: attempt方法中設置您喜歡的任何列。

在你的情況下,bewlow構造應該工作

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

對於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是實際具有登錄過程的特征。

如果您要將用戶表格中的列名稱從“電子郵件”更改為“您的列”,

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

我們需要覆蓋(?我實際上不是一個好的OOP開發人員),這個方法。

像這樣

在loginController中,

use AuthenticatesUsers {
  username as username;
}

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

然后它就像在trait中重寫username()方法一樣。 干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM