php-laravel框架使用者驗證(Auth)模組解析(三)登入模組
阿新 • • 發佈:2018-12-26
一、登入模組路由
路由名稱 | 請求方式 | 方法實現 |
/login | GET | 登入頁面 |
/login | POST | 實現登入功能 |
/logout | POST | 實現登出功能 |
二、控制器解析
跟註冊的控制器一樣,大部分的邏輯使用trait引入。
$redirectTo配置,如果在登入狀態,重定向的頁面
protected $redirectTo = '/home';
非常簡單一個控制器。
三、登入狀態判斷
登入狀態判斷與使用,使用Auth facade 來判斷
// 獲取當前通過認證的使用者
$user = Auth::user();
// 獲取當前通過認證的使用者 ID
$id = Auth::id();
//判斷是否已登入
Auth::check();
在blade模板中,可以使用@guest標籤來處理
@guest
未登入
@else
已登入,使用者名稱:{{ Auth::user()->name }}
@endguest
四、擴充套件開發:自定義的登入行為
預設生成的程式碼,使用email進行登入,這裡我們嘗試修改為可使用使用者名稱、電子郵箱、手機號這三種方式之一來登入。
1)在auth/login.blade.php模板中,把email欄位修改為login_name(當然,這個欄位是自定義的)
2)修改登入的行為
登入行為位於Illuminate\Foundation\Auth\AuthenticatesUsers::login方法中
$this->validateLogin($request);
驗證登入引數,由於我們改了欄位,需要重寫這個方法,並修改sendFailedLoginResponse的提示資訊。
protected function validateLogin(Request $request) { $this->validate($request, [ 'login_name' => 'required|string', 'password' => 'required|string', ]); } protected function sendFailedLoginResponse(Request $request) { throw ValidationException::withMessages([ 'login_name' => [trans('auth.failed')], ]); }
$this->attemptLogin($request);
實現登入邏輯,需要迴圈3個欄位查詢。$this->guard()->attempt實現了從資料庫中獲取User例項。
protected function attemptLogin(Request $request)
{
foreach (['name', 'email', 'phone'] as $loginName) {
$requestArr = [
$loginName => $request->input('login_name'),
'password' => $request->input('password'),
];
$loginStatus = $this->guard()->attempt(
$requestArr, $request->filled('remember')
);
if ($loginStatus) {
return $loginStatus;
}
}
return false;
}
Ok,我們自定義的登入行為就完成了,可以看看我的demo:http://shebao.bytrees.com/login