首頁 > 後端開發 > php教程 > Laravel的多用戶認證系統簡介

Laravel的多用戶認證系統簡介

小云云
發布: 2023-03-21 10:40:02
原創
1104 人瀏覽過

自從Laravel5.2開始,自備的Auth認證系統可以支援多個角色認證了。是說你比如果有管理員、普通使用者這兩種角色,都可以透過同一個Auth系統來實現認證。

本文將詳細介紹Laravel多用戶認證系統的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

#1 自動產生程式碼

#Laravel自帶的Auth可以透過一行指令來產生相關的認證控制器、模版以及路由:


php artisan make:auth
登入後複製

這樣就會產生一個AuthController認證控制器和HomeController通用控制器,這個控制器沒什麼用,就是登入成功後跳轉的;還有就是一些登入註冊需要的模版檔案,在resource/view裡面看看就知道了;而且還會在路由檔案中產生相關認證路由,原始碼在\Illuminate\Routing\Router::auth (); ,其實就是設定了一些登入註冊用的:


#
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檔案設定

這個是和認證相關的設定文件,估計很多人看不懂裡面一些概念,比如說guard以及provider
這些,文檔也基本上是沒寫。那麼guard到底是什麼東西呢?這個可以理解為就是一個角色,在guards
陣列中的每一項都是一個角色,預設的有web和api兩種,這表示了目前有這兩種角色會使用到認證系統。當然,這兩種肯定是不會滿足我們要求的,所以我們通常都會自訂一些guard。自訂也很簡單,就是在guards數組增加一項,其中driver就是表示這個認證要怎麼去保存用戶狀態,一般是保存在session中,而provider就是下面provider數組的一項,那麼provider又是什麼鬼呢?這個更好理解了,你要實現用戶認證肯定要保存用戶名密碼對吧,那麼provider就是告訴Laravel你的用戶資訊保存在哪一張表裡面,driver就是告訴了要使用那種方式來操作資料庫。

#3 認證

#其實Laravel自動產生的程式碼已經可以滿足登入註冊的需求了,但是每一個guard都需要一個AuthController來,那麼如何公用一個認證控制器呢?這裡就是用到guard這個東西了,因為可以表示使用者身分來進行不同的邏輯。但是,在認證控制器中無法取得到這guard,所以我們可以透過路由參數的方式來實現。定義一個路由群組:


Route::group(['prefix'=>'{guard}'],function(){ Route::auth();});
登入後複製

在這個路由群組中我們設定前綴為guard參數,這樣就可以在AuthController中取得到目前的guard了。一般情況下我們取得路由參數都是透過依賴注入Request實例來獲取,但是這裡也有一個坑那就是我在5.1版本之前路由參數都可以透過


##

$request->input('key')
登入後複製

這樣來獲取,但是在5.2中已經不行了,必須透過



#

$request->key
登入後複製

來獲取,或是直接從路由實例中獲取,不知道這是什麼原因。在AuthController控制器中使用了一些trait,這些trait就是實作了認證註冊的邏輯,可以透過重寫一些控制器的屬性來自訂邏輯。包括

$redirectTo還有$guard以及$username等等,這些一看就知道第一個是登入成功後跳轉,第二個就是定義目前使用的guard,第三個是認證使用的使用者名字段。所以我們可以在認證控制器中透過取得到的guard來自訂。

#4 路由保護

#一般做認證系統的,都是要來保護路由的,那麼如何保護路由呢?文件裡面說給需要保護的路由添加一個auth中間件,那麼事實是怎麼樣的呢?事實也確實是這樣,不過文檔沒有說的一點是,透過auth中間件保護的路由必須還要加上web中間件、必須還要加上web中間件、必須還要加上web中間件,重要的事情要說三次啊,不然會出什麼問題呢?不管你認證成功失敗都是會跳到/這條路由,這個大坑要注意!當然你也可以在中間件中指定guard來讓Laravel知道通過那個來認證,如果沒指定的話就是使用設定檔裡面預設的:



Route::get('profile', [ 'middleware' => 'auth:api', 'uses' => 'ProfileController@show']);
登入後複製

#5 取得使用者實例

透過認證後就可以透過Auth門面來取得到目前通過認證的使用者實例。



$user = Auth::user();
登入後複製

這裡還有一個要注意的是,以上的方式預設取得的是設定檔中的guard的,假如你目前登入的guard不是配置文件中的,就必須要這樣子來取得:



$user = Auth::guard('guard')->user();
登入後複製

#6 总结

总得来说,Laravel5.2自带的Auth系统还是很好用的,只是有一些小坑文档没说清楚,用过几次之后就可以很熟悉了,可以给我们节约很多的开发时间。

相关推荐:

Laravel多用户认证系统


以上是Laravel的多用戶認證系統簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板