若是某個模型類須要用於認證,必須繼承自 Illuminate\Foundation\Auth\User
基類,不然會報錯。而後在這個模型類中使用 Notifiable
Trait,裏面提供了用戶發送通知的相關方法。配置 $hidden
屬性,在返回查詢結果的時候將敏感信息過濾掉,避免安全隱患。
php
<?php namespace App\Models; use Illuminate\Foundation\Auth\User; use Illuminate\Notifications\Notifiable; class Manager extends User { use Notifiable; protected $hidden = ['password', 'remember_token']; }
public function login(Request $request) { $rs = \Auth::guard('admin')->attempt($request->only(['email', 'password'])); if ($rs) { return redirect()->intended('dashboard'); } }
attempt
方法接受一個鍵值對數組做爲其第一個參數。數組中的值將被用於在數據表中查找用戶。因此,在上例中,用戶將經過 email
字段的值進行檢索。若是找到了這個用戶,數據庫中保存的哈希密碼將被用來與傳遞給方法的數組中 password
的哈希值進行比較。你不該該將指定爲密碼的 password
的值進行哈希操做,由於框架將在比較前,自動對其進行hash操做。若是這兩個哈希密碼匹配,就會爲用戶開啓一個已認證的會話。html
若是認證成功那麼 attempt
方法將返回 true
。反之,會返回 false
。laravel
重定向器上的 intended
方法將重定向用戶到他們曾經但願訪問的 URL,這個 URL 以前被用戶認證中間件攔截了。能夠給這個方法傳遞一個回退 URI,用於預期的地址不可用的狀況。web
若是想在應用中提供「記住我」的功能 ,你能夠給 attempt
方法的第二個參數傳入一個布爾值,這將永久保持用戶的認證狀態,或者直到他們手動註銷登陸。固然,你的用戶表必須包含名爲 remember_token
的字符串字段,它將被用於保存「記住我」的令牌。數據庫
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) { // 這個用戶被記住了... }
若是你啓用了「記住」用戶,你可使用 viaRemember
方法肯定用戶是否正使用「記住我」的cookie令牌進行的認證 數組
if (Auth::viaRemember()) { // }
要將用戶從應用中註銷,你可使用 Auth
門面上的 logout
方法。這將清除用戶會話中的認證信息:安全
Auth::logout();
若是你須要把現存的用戶實例登入應用, 你能夠調用 login
方法並附帶用戶實例做爲參數。給定的這個對象必須實現 Illuminate\Contracts\Auth\Authenticatable
契約,或者繼承自Illuminate\Foundation\Auth\User基類。cookie
Auth::login($user); // 登陸而且「記住」給定的用戶... Auth::login($user, true);
要使用用戶的 ID 登陸應用,你可使用 loginUsingId
方法。這個方法接受須要認證的用戶主鍵:app
Auth::loginUsingId(1); // 登陸而且「記住」給定的用戶... Auth::loginUsingId(1, true);
你能夠在單次請求中使用 once
方法將用戶登陸到應用中。這將不會使用任何 Session 或者 Cookie,這意味着在構建無狀態API時,此方法可能會有所幫助:框架
if (Auth::once($credentials)) { // }
Laravel 還提供了一種機制,用於將其它設備上的用戶 Session 失效和「註銷」,而不會使其當前設備上的 Session 失效。首先,你須要保證Illuminate\Session\Middleware\AuthenticateSession
中間件在你的app/Http/Kernel.php
類中的 web
中間件組中,而且沒有被註釋掉:
'web' => [ // ... \Illuminate\Session\Middleware\AuthenticateSession::class, // ... ],
而後, 你就可使用 Auth
門面上的 logoutOtherDevices
方法。此方法要求用戶提供其當前密碼,你的應用程序應經過輸入表單接受該密碼:
use Illuminate\Support\Facades\Auth; Auth::logoutOtherDevices($password);
官方文檔:https://learnku.com/docs/laravel/5.7/authentication/2269#08b509