《PHP實戰(zhàn):基于Laravel5.4實現(xiàn)多字段登錄功能方法示例》要點:
本文介紹了PHP實戰(zhàn):基于Laravel5.4實現(xiàn)多字段登錄功能方法示例,希望對您有用。如果有疑問,可以聯(lián)系我們。
前言PHP實例
最近在一個項目中需要實現(xiàn)一個多字段登錄功能,簡單來說就是可以使用用戶名、郵箱或手機號任意一種方式進行登錄.所以本文就來給大家介紹了關(guān)于Laravel5.4多字段登錄的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),話不多說了,來一起看看詳細的介紹吧.PHP實例
以下內(nèi)容基于laravel5.4PHP實例
方法如下:PHP實例
首先,通過artisan工具生成auth模塊PHP實例
php artisan make:auth
PHP實例
這時候App\Http\Controllers目錄下會新增一個Auth目錄,該目錄下為注冊登錄相關(guān)的控制器,resources\views目錄下也會生成一些與注冊登錄相關(guān)的視圖PHP實例
laravel的官方文檔中說手動認證用戶需要使用Illuminate\Support\Facades\Auth類的attempt方法,如下:PHP實例
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; 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'); } } }
這個方法會根據(jù)你傳入的參數(shù)判斷數(shù)據(jù)庫中是否存在與之相匹配的用戶,如果存在并且密碼正確返回true,反之返回falsePHP實例
遂在LoginController中添加該方法,但是好像并沒有效果PHP實例
于是開始觀察LoginController的實現(xiàn)機制,發(fā)現(xiàn)它實現(xiàn)了一個AuthenticatesUsers的trait,追蹤到這個trait的定義文件,發(fā)現(xiàn)這個文件就是我們想要的東西PHP實例
里面有一個login方法,就是負責處理登錄的邏輯PHP實例
/** * 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. // 防止暴力破解,多次登錄失敗會根據(jù)IP鎖定 if ($this->hasTooManyLoginAttempts($request)) { $this->fireLockoutEvent($request); return $this->sendLockoutResponse($request); } // 這個就是主要的負責判斷數(shù)據(jù)庫中是否存在相應(yīng)的賬號和密碼的地方,我們需要重寫的就是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. // 登錄失敗,失敗次數(shù)++,防止暴力破解 $this->incrementLoginAttempts($request); // 返回失敗響應(yīng) return $this->sendFailedLoginResponse($request); }
分析了一波這個文件,發(fā)現(xiàn)主要進行登錄判斷的就是attemptLogin方法,我們只要重寫這個方法即可,先看看原來的是怎么寫的,根據(jù)原來的進行重寫:PHP實例
/** * 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重寫后:PHP實例
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,不成功繼續(xù)用其他字段進行判斷,都不成功則返回flasePHP實例
測試,可以實現(xiàn)多字段登錄效果PHP實例
總結(jié)PHP實例
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對維易PHP的支持.PHP實例
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/329.html