首頁  >  文章  >  後端開發  >  Laravel實現多用戶認證系統

Laravel實現多用戶認證系統

php中世界最好的语言
php中世界最好的语言原創
2018-03-24 17:57:322444瀏覽

這次為大家帶來Laravel實現多用戶認證系統,Laravel實現多用戶認證系統的注意事項有哪些,下面就是實戰案例,一起來看一下。

前言

自從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系统还是很好用的,只是有一些小坑文档没说清楚,用过几次之后就可以很熟悉了,可以给我们节约很多的开发时间。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

PHP实现路由和类自动加载

bindParam和bindValue在Yii2中的使用详解

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn