最近在工作中遇到一個需求,需要實現多字段登錄的一個效果,就是可以使用手機或者郵箱任一種方式的登錄,現在將解決的過程分享出來,所以這篇文章主要給大家介紹了基于Laravel5.4實現多字段登錄功能的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
前言
最近在一個項目中需要實現一個多字段登錄功能,簡單來說就是可以使用用戶名、郵箱或手機號任意一種方式進行登錄。所以本文就來給大家介紹了關于Laravel5.4多字段登錄的相關內容,分享出來供大家參考學習,話不多說了,來一起看看詳細的介紹吧。
以下內容基于laravel5.4
方法如下:
首先,通過artisan工具生成auth模塊
php artisan make:auth
這時候App/Http/Controllers目錄下會新增一個Auth目錄,該目錄下為注冊登錄相關的控制器,resources/views目錄下也會生成一些與注冊登錄相關的視圖
laravel的官方文檔中說手動認證用戶需要使用Illuminate/Support/Facades/Auth類的attempt方法,如下:
?phpnamespace App/Http/Controllers;use Illuminate/Support/Facades/Auth;html' target='_blank'>class LoginController extends Controller * Handle an authentication attempt. * @return Response public function authenticate() if (Auth::attempt([ email = $email, password = $password])) { // Authentication passed... return redirect()- intended( dashboard }
這個方法會根據你傳入的參數判斷數據庫中是否存在與之相匹配的用戶,如果存在并且密碼正確返回true,反之返回false
遂在LoginController中添加該方法,但是好像并沒有效果
于是開始觀察LoginController的實現機制,發現它實現了一個AuthenticatesUsers的trait,追蹤到這個trait的定義文件,發現這個文件就是我們想要的東西
里面有一個login方法,就是負責處理登錄的邏輯
/** * Handle a login request to the application. * @param /Illuminate/Http/Request $request * @return /Illuminate/Http/RedirectResponse|/Illuminate/Http/Response public function login(Request $request) // 表單驗證 $this- validateLogin($request); // If the class is using the ThrottlesLogins trait, we can automatically throttle // the login attempts for this application. We ll key this by the username and // the IP address of the client making these requests into this application. // 防止暴力破解,多次登錄失敗會根據IP鎖定 if ($this- hasTooManyLoginAttempts($request)) { $this- fireLockoutEvent($request); return $this- sendLockoutResponse($request); // 這個就是主要的負責判斷數據庫中是否存在相應的賬號和密碼的地方,我們需要重寫的就是attemptLogin方法 if ($this- attemptLogin($request)) { return $this- sendLoginResponse($request); // If the login attempt was unsuccessful we will increment the number of attempts // to login and redirect the user back to the login form. Of course, when this // user surpasses their maximum number of attempts they will get locked out. // 登錄失敗,失敗次數++,防止暴力破解 $this- incrementLoginAttempts($request); // 返回失敗響應 return $this- sendFailedLoginResponse($request); }
分析了一波這個文件,發現主要進行登錄判斷的就是attemptLogin方法,我們只要重寫這個方法即可,先看看原來的是怎么寫的,根據原來的進行重寫:
/** * Attempt to log the user into the application. * @param /Illuminate/Http/Request $request * @return bool protected function attemptLogin(Request $request) return $this- guard()- attempt( $this- credentials($request), $request- has( remember ) }
在LoginController重寫后:
public function attemptLogin(Request $request) $username = $request- input( username $password = $request- input( password // 驗證用戶名登錄方式 $usernameLogin = $this- guard()- attempt( [ username = $username, password = $password], $request- has( remember ) if ($usernameLogin) { return true; // 驗證手機號登錄方式 $mobileLogin = $this- guard()- attempt( [ mobile = $username, password = $password], $request- has( remember ) if ($mobileLogin) { return true; // 驗證郵箱登錄方式 $emailLogin = $this- guard()- attempt( [ email = $username, password = $password], $request- has( remember ) if ($emailLogin) { return true; return false; }
只需要用attempt方法進行多次判斷即可,只要成功就返回true,不成功繼續用其他字段進行判斷,都不成功則返回flase
測試,可以實現多字段登錄效果
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !
相關推薦:
Larave如何l實現短信注冊
使用Laravel實現定時任務的方法
以上就是關于Laravel5.4實現多字段登錄的方法的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答