Laravel多用戶認(rèn)證系統(tǒng)示例詳解
前言
自從Laravel5.2開始,自帶的Auth認(rèn)證系統(tǒng)可以支持多個角色認(rèn)證了。就是說你比如果有管理員、普通用戶這兩種角色,都可以通過同一個Auth系統(tǒng)來實(shí)現(xiàn)認(rèn)證。
本文將詳細(xì)給大家介紹關(guān)于Laravel多用戶認(rèn)證系統(tǒng)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
#1 自動生成代碼
Laravel自帶的Auth可以通過一行命令來生成相關(guān)的認(rèn)證控制器、模版以及路由:
php artisan make:auth
這樣就會生成一個AuthController認(rèn)證控制器和HomeController通用控制器,這個控制器沒什么用,就是登錄成功后跳轉(zhuǎn)的;還有就是一些登錄注冊需要的模版文件,在resource/view里面看看就知道了;而且還會在路由文件中生成相關(guān)認(rèn)證路由,源代碼在\Illuminate\Routing\Router::auth();
,其實(shí)就是配置了一些登錄注冊用的:
public function auth() { // Authentication Routes... $this->get('login', 'Auth\AuthController@showLoginForm'); $this->post('login', 'Auth\AuthController@login'); $this->get('logout', 'Auth\AuthController@logout'); // Registration Routes... $this->get('register', 'Auth\AuthController@showRegistrationForm'); $this->post('register', 'Auth\AuthController@register'); // Password Reset Routes... $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm'); $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail'); $this->post('password/reset', 'Auth\PasswordController@reset'); }
#2 auth.php文件配置
這個是和認(rèn)證相關(guān)的配置文件,估計很多人看不懂里面一些概念,比如說guard以及provider
這些,文檔也基本上是沒寫。那么guard到底是什么東西呢?這個可以理解為就是一個角色,在guards
數(shù)組中的每一項都是一個角色,默認(rèn)的有web和api兩種,這就表示了當(dāng)前有這兩種角色會使用到認(rèn)證系統(tǒng)。當(dāng)然,這兩種肯定是不會滿足我們要求的,所以我們一般都會自定義一些guard。自定義也很簡單,就是在guards數(shù)組增加一項,其中driver就是表示這個認(rèn)證要怎么去保存用戶狀態(tài),一般是保存在session中,而provider就是下面provider數(shù)組的一項,那么provider又是什么鬼呢?這個更好理解了,你要實(shí)現(xiàn)用戶認(rèn)證肯定要保存用戶名密碼對吧,那么provider就是告訴Laravel你的用戶信息保存在哪一張表里面,driver就是告訴了要使用那種方式來操作數(shù)據(jù)庫。
#3 認(rèn)證
其實(shí)Laravel自動生成的代碼已經(jīng)可以滿足登錄注冊的需求了,但是每一個guard都需要一個AuthController來,那么如何公用一個認(rèn)證控制器呢?這里就是用到guard這個東西了,因?yàn)榭梢员硎居脩羯矸輥磉M(jìn)行不同的邏輯。但是,在認(rèn)證控制器中無法獲取到這guard,所以我們可以通過路由參數(shù)的方式來實(shí)現(xiàn)。定義一個路由群組:
Route::group(['prefix'=>'{guard}'],function(){ Route::auth();});
在這個路由群組中我們設(shè)置前綴為guard參數(shù),這樣就可以在AuthController中獲取到當(dāng)前的guard了。一般情況下我們獲取路由參數(shù)都是通過依賴注入Request實(shí)例來獲取,但是這里也有一個坑那就是我在5.1版本之前路由參數(shù)都可以通過
$request->input('key')
這樣來獲取,但是在5.2中已經(jīng)不行了,必須通過
$request->key
來獲取,或者就是直接從路由實(shí)例中獲取,不知道這是什么原因。在AuthController控制器中使用了一些trait,這些trait就是實(shí)現(xiàn)了認(rèn)證注冊的邏輯,可以通過重寫一些控制器的屬性來自定義邏輯。包括$redirectTo
還有$guard
以及$username
等等,這些一看就知道第一個是登錄成功后跳轉(zhuǎn),第二個就是定義當(dāng)前使用的guard,第三個就是認(rèn)證使用的用戶名字段。所以我們可以在認(rèn)證控制器中通過獲取到的guard來自定義。
#4 路由保護(hù)
一般做認(rèn)證系統(tǒng)的,都是要來保護(hù)路由的,那么如何保護(hù)路由呢?文檔里面說給需要保護(hù)的路由添加一個auth中間件,那么事實(shí)是怎樣的呢?事實(shí)也確實(shí)是這樣,不過文檔沒有說的一點(diǎn)是,通過auth中間件保護(hù)的路由必須還要加上web中間件、必須還要加上web中間件、必須還要加上web中間件,重要的事情要說三遍啊,不然會出現(xiàn)什么問題呢?不管你認(rèn)證成功失敗都是會跳轉(zhuǎn)到/這條路由,這個大坑要注意!當(dāng)然你也可以在中間件中指定guard來讓Laravel知道通過那個來認(rèn)證,如果沒指定的話就是使用配置文件里面默認(rèn)的:
Route::get('profile', [ 'middleware' => 'auth:api', 'uses' => 'ProfileController@show']);
#5 獲取用戶實(shí)例
通過認(rèn)證后就可以通過Auth門面來獲取到當(dāng)前通過認(rèn)證的用戶實(shí)例。
$user = Auth::user();
這里還有一個要注意的是,以上的方式默認(rèn)獲取的是配置文件中的guard的,假如你當(dāng)前登錄的guard不是配置文件中的,就必須要這樣子來獲?。?br />
$user = Auth::guard('guard')->user();
#6 總結(jié)
總得來說,Laravel5.2自帶的Auth系統(tǒng)還是很好用的,只是有一些小坑文檔沒說清楚,用過幾次之后就可以很熟悉了,可以給我們節(jié)約很多的開發(fā)時間。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- Laravel實(shí)現(xiàn)用戶注冊和登錄
- Laravel 5框架學(xué)習(xí)之用戶認(rèn)證
- Laravel重寫用戶登錄簡單示例
- Laravel框架用戶登陸身份驗(yàn)證實(shí)現(xiàn)方法詳解
- Laravel實(shí)現(xiàn)用戶多字段認(rèn)證的解決方法
- Laravel5.5 實(shí)現(xiàn)后臺管理登錄的方法(自定義用戶表登錄)
- 解決laravel5中auth用戶登錄其他頁面獲取不到登錄信息的問題
- laravel-admin 管理平臺獲取當(dāng)前登陸用戶信息的例子
- Laravel6.2中用于用戶登錄的新密碼確認(rèn)流程詳解
- Laravel 微信小程序后端實(shí)現(xiàn)用戶登錄的示例代碼
- Laravel用戶授權(quán)系統(tǒng)的使用方法示例
- laravel利用中間件防止未登錄用戶直接訪問后臺的方法
- Laravel 框架基于自帶的用戶系統(tǒng)實(shí)現(xiàn)登錄注冊及錯誤處理功能分析
相關(guān)文章
CI框架封裝的常用圖像處理方法(縮略圖,水印,旋轉(zhuǎn),上傳等)
這篇文章主要介紹了CI框架封裝的常用圖像處理方法,涉及針對圖像的縮略圖、水印、旋轉(zhuǎn)、上傳等操作,需要的朋友可以參考下2016-11-11基于PHP+jQuery+MySql實(shí)現(xiàn)紅藍(lán)(頂踩)投票代碼
當(dāng)雙方意見不統(tǒng)一的情況下,需要用投票達(dá)成協(xié)議,本文通過實(shí)例給大家介紹基于PHP+jQuery+MySql實(shí)現(xiàn)紅藍(lán)(頂踩)投票代碼,需要的朋友可以參考下2015-08-08使用ThinkPHP的自動完成實(shí)現(xiàn)無限級分類實(shí)例詳解
這篇文章主要介紹了使用ThinkPHP的自動完成實(shí)現(xiàn)無限級分類功能,本文通過圖文并茂的方式給大家展示,介紹的非常詳細(xì),具有參考借鑒價值,感興趣的朋友一起看看吧2016-09-09PHP基于CURL進(jìn)行POST數(shù)據(jù)上傳實(shí)例
這篇文章主要介紹了PHP基于CURL進(jìn)行POST數(shù)據(jù)上傳的方法,以完整的實(shí)例形式較為詳細(xì)的講述了PHP采用curl進(jìn)行POST數(shù)據(jù)傳遞的方法,具有一定的參考借鑒價值,需要的朋友可以參考下2014-11-11Laravel如何使用數(shù)據(jù)庫事務(wù)及捕獲事務(wù)失敗后的異常詳解
最近在學(xué)習(xí)Laravel,在學(xué)習(xí)中遇到了不少的問題,所以想著總結(jié)記錄下來,所以下面這篇文章主要給大家介紹了關(guān)于Laravel如何使用數(shù)據(jù)庫事務(wù)及捕獲事務(wù)失敗后異常的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10修改yii2.0用戶登錄使用的user表為其它的表實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)硪黄薷膟ii2.0用戶登錄使用的user表為其它的表實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08