搜尋
首頁後端開發php教程Laravel實現多用戶認證系統
Laravel實現多用戶認證系統Mar 24, 2018 pm 05:57 PM
laravel多用戶系統

這次為大家帶來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
laravel单点登录方法详解laravel单点登录方法详解Jun 15, 2022 am 11:45 AM

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单点登录的相关问题,单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,下面一起来看一下,希望对大家有帮助。

一起来聊聊Laravel的生命周期一起来聊聊Laravel的生命周期Apr 25, 2022 pm 12:04 PM

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于Laravel的生命周期相关问题,Laravel 的生命周期从public\index.php开始,从public\index.php结束,希望对大家有帮助。

laravel中guard是什么laravel中guard是什么Jun 02, 2022 pm 05:54 PM

在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中asset()方法怎么用laravel中asset()方法怎么用Jun 02, 2022 pm 04:55 PM

laravel中asset()方法的用法:1、用于引入静态文件,语法为“src="{{asset(‘需要引入的文件路径’)}}"”;2、用于给当前请求的scheme前端资源生成一个url,语法为“$url = asset('前端资源')”。

实例详解laravel使用中间件记录用户请求日志实例详解laravel使用中间件记录用户请求日志Apr 26, 2022 am 11:53 AM

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。

laravel中间件基础详解laravel中间件基础详解May 18, 2022 am 11:46 AM

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于中间件的相关问题,包括了什么是中间件、自定义中间件等等,中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制,下面一起来看一下,希望对大家有帮助。

laravel的fill方法怎么用laravel的fill方法怎么用Jun 06, 2022 pm 03:33 PM

在laravel中,fill方法是一个给Eloquent实例赋值属性的方法,该方法可以理解为用于过滤前端传输过来的与模型中对应的多余字段;当调用该方法时,会先去检测当前Model的状态,根据fillable数组的设置,Model会处于不同的状态。

laravel路由文件在哪个目录里laravel路由文件在哪个目录里Apr 28, 2022 pm 01:07 PM

laravel路由文件在“routes”目录里。Laravel中所有的路由文件定义在routes目录下,它里面的内容会自动被框架加载;该目录下默认有四个路由文件用于给不同的入口使用:web.php、api.php、console.php等。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能