使用Laravel怎么實現(xiàn)一個多用戶認(rèn)證系統(tǒng)-創(chuàng)新互聯(lián)

本篇文章為大家展示了使用Laravel怎么實現(xiàn)一個多用戶認(rèn)證系統(tǒng),內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)梅列免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

#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();,其實就是配置了一些登錄注冊用的:


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又是什么鬼呢?這個更好理解了,你要實現(xiàn)用戶認(rèn)證肯定要保存用戶名密碼對吧,那么provider就是告訴Laravel你的用戶信息保存在哪一張表里面,driver就是告訴了要使用那種方式來操作數(shù)據(jù)庫。


#3 認(rèn)證


其實Laravel自動生成的代碼已經(jīng)可以滿足登錄注冊的需求了,但是每一個guard都需要一個AuthController來,那么如何公用一個認(rèn)證控制器呢?這里就是用到guard這個東西了,因為可以表示用戶身份來進(jìn)行不同的邏輯。但是,在認(rèn)證控制器中無法獲取到這guard,所以我們可以通過路由參數(shù)的方式來實現(xiàn)。定義一個路由群組:


Route::group(['prefix'=>'{guard}'],function(){ Route::auth();});

在這個路由群組中我們設(shè)置前綴為guard參數(shù),這樣就可以在AuthController中獲取到當(dāng)前的guard了。一般情況下我們獲取路由參數(shù)都是通過依賴注入Request實例來獲取,但是這里也有一個坑那就是我在5.1版本之前路由參數(shù)都可以通過


$request->input('key')

這樣來獲取,但是在5.2中已經(jīng)不行了,必須通過


$request->key

來獲取,或者就是直接從路由實例中獲取,不知道這是什么原因。在AuthController控制器中使用了一些trait,這些trait就是實現(xiàn)了認(rèn)證注冊的邏輯,可以通過重寫一些控制器的屬性來自定義邏輯。包括$redirectTo還有$guard以及$username等等,這些一看就知道第一個是登錄成功后跳轉(zhuǎn),第二個就是定義當(dāng)前使用的guard,第三個就是認(rèn)證使用的用戶名字段。所以我們可以在認(rèn)證控制器中通過獲取到的guard來自定義。


#4 路由保護


一般做認(rèn)證系統(tǒng)的,都是要來保護路由的,那么如何保護路由呢?文檔里面說給需要保護的路由添加一個auth中間件,那么事實是怎樣的呢?事實也確實是這樣,不過文檔沒有說的一點是,通過auth中間件保護的路由必須還要加上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 獲取用戶實例


通過認(rèn)證后就可以通過Auth門面來獲取到當(dāng)前通過認(rèn)證的用戶實例。


$user = Auth::user();

這里還有一個要注意的是,以上的方式默認(rèn)獲取的是配置文件中的guard的,假如你當(dāng)前登錄的guard不是配置文件中的,就必須要這樣子來獲取:


$user = Auth::guard('guard')->user();

上述內(nèi)容就是使用Laravel怎么實現(xiàn)一個多用戶認(rèn)證系統(tǒng),你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前題目:使用Laravel怎么實現(xiàn)一個多用戶認(rèn)證系統(tǒng)-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://www.muchs.cn/article26/sphjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、軟件開發(fā)、網(wǎng)站收錄、商城網(wǎng)站關(guān)鍵詞優(yōu)化、手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司