Laravel6:自定義多欄位登入,使用者名稱,郵箱等

SoloAsural9459發表於2020-12-11

廢話不多說,直接上乾貨【親測有效!】

  1. App下建立Traits目錄

  2. 建立 AuthenticatesUsers.php 檔案

  3. <?php
    namespace App\Traits;
    use Illuminate\Foundation\Auth\AuthenticatesUsers as LaravelAuthenticatesUsers;
    trait AuthenticatesUsers
    {
     use LaravelAuthenticatesUsers;
    
     static public function username()
     {
         // 獲取使用者提交資料
         $username = request()->get('username');
         // 判斷使用者提交的資料,檢測應該使用哪種方式登入
         switch ($username) {
             case filter_var($username, FILTER_VALIDATE_EMAIL):
                 return 'email';
                 break;
             case preg_match("/^1[34578]\d{9}$/", $username) == 1:
                 return 'mobile';
                 break;
             default:
                 return 'username';
                 break;
         }
     }
    }
  4. LoginController.php中不需要定義 username()方法

  5. 應用:

     在自己的控制器中引用 
    use App\Traits\AuthenticatesUsers;
    ......
    //使用者登入
    
     public function login(Request $request)
     {
         $loginMark = AuthenticatesUsers::username();
         $token = Auth::guard('api')->attempt([$loginMark => $request->username, 'password' => $request->password]);
         if ($token) {
             return $this->setMessage('登入成功!' . $loginMark)->setStatusCode(201)->success(['token' => 'bearer ' . $token]);
         }
         return $this->failed('賬號或密碼錯誤!', 400);
     }
  6. 測試
    (1).手機號
    Laravel6:自定義多欄位登入,使用者名稱,郵箱等
    Laravel6:自定義多欄位登入,使用者名稱,郵箱等
    (2).郵箱
    Laravel6:自定義多欄位登入,使用者名稱,郵箱等
    Laravel6:自定義多欄位登入,使用者名稱,郵箱等
    (3).使用者名稱
    Laravel6:自定義多欄位登入,使用者名稱,郵箱等
    Laravel6:自定義多欄位登入,使用者名稱,郵箱等

  7. 完結!

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

相關文章