如何把 Laravel 預設郵箱登入改成使用者名稱登入

寫PHP的老王發表於2019-08-11

Laravel中預設的登入是透過郵箱和密碼進行登入的。那麼,怎麼樣才能用最少的改動將它改成用密碼登入呢?

預設的,Laravel使用的是Illuminate\Foundation\Auth\AuthenticatesUsers這個trait完成登入功能的。透過觀察AuthenticatesUsers的程式碼,發現下面一段很有意思的程式碼:

    protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => 'required|string',
            'password' => 'required|string',
        ]);
    }
    public function username()
    {
        return 'email';
    }

可以看到,是應為trait裡定義了使用者名稱就是email,所以才會使得驗證的時候透過使用者郵箱驗證。所以我們只需要定義一個trait,覆蓋AuthenticatesUsers中的username()方法即可實現後端程式碼透過使用者名稱驗證登入。

新增的trait程式碼

namespace App\Utils;

use Illuminate\Foundation\Auth\AuthenticatesUsers as LaravelAuthenticatesUsers;
trait AuthenticatesUsers {
    use LaravelAuthenticatesUsers;
    public function username()
    {
        return 'name';
    }
}

其實還有另一個簡單的修改方式,直接在LoginController中新增username()方法。由於當前定義方法會覆蓋trait的方法,因此也能達到修改的目的。但是會破壞登入程式碼的整體一致性,所以最好還是透過新增trait的方式實現。

同時要記得修改前端blade檔案中對輸入引數的驗證,然後就可以使用使用者名稱登入了

如何把Laravel預設郵箱登入改成使用者名稱登入

文章有【寫PHP的老王】釋出,喜歡的可以關注公眾號【寫PHP的老王】

本作品採用《CC 協議》,轉載必須註明作者和本文連結
寫PHP的老王

相關文章