摘要:不同認(rèn)證方式我們先來看數(shù)組讓我們可以配置一個(gè)提供者每個(gè)提供者可以選擇不同的可以選擇或者對(duì)應(yīng)的驅(qū)動(dòng)之后選擇對(duì)應(yīng)的配置項(xiàng)在擁有之后我們可以配置守衛(wèi)守衛(wèi)可以配置一個(gè)驅(qū)動(dòng)者和一個(gè)提供者提供者就是我們上面配置的而驅(qū)動(dòng)者則有認(rèn)正認(rèn)正可供選擇默認(rèn)使用的是
不同認(rèn)證方式
我們先來看 config/auth.php
provider
providers 數(shù)組讓我們可以配置一個(gè)提供者,每個(gè)提供者可以選擇不同的 driver.driver可以選擇eloquent 或者 database ,
對(duì)應(yīng)的驅(qū)動(dòng)之后選擇對(duì)應(yīng)的配置項(xiàng),eloquent:model,database:table
guard
在擁有provider之后我們可以配置guards 守衛(wèi),守衛(wèi)可以配置一個(gè)驅(qū)動(dòng)者和一個(gè)提供者
提供者就是我們上面配置的provider
而驅(qū)動(dòng)者則有session(session認(rèn)正),token(token認(rèn)正)可供選擇
默認(rèn)api使用的是token認(rèn)正,而web用戶使用session認(rèn)正
session認(rèn)正在認(rèn)證時(shí)我們可以使用Auth::attempt(["email" => $email, "password" => $password])方法,此方法在驗(yàn)證成功后會(huì)自動(dòng)為這個(gè)用戶設(shè)置一個(gè)認(rèn)證 Session,標(biāo)識(shí)該用戶登錄成功
后面就可以使用Auth::guard()->check()方式驗(yàn)證用戶是否已經(jīng)登錄
token認(rèn)正此認(rèn)正方式laravel雖然提供了驅(qū)動(dòng)方法,但是并沒有默認(rèn)它為驗(yàn)證方式,也沒有提供自動(dòng)生成token的方法,要使用此方法要自定義login方法
通過查看底層的vendorlaravelframeworksrcIlluminateAuthTokenGuard.php方法,我們可以發(fā)現(xiàn)laravel5.5底層默認(rèn)的是token字段,我們也可以在此自定義此字段,在此我使用了web_token作為認(rèn)正字段
然后我們還要在數(shù)據(jù)庫里建立相應(yīng)的字段web_token
注:如果使用redis等nosql保存web_token的話也是需要web_token的,為了使laravel自帶的Auth門面可以使用
建立完字段以后就可以寫登錄方法了:
在這里還是使用了redis去保存token,便于設(shè)置token的過期時(shí)間
至于為什么還要保存在數(shù)據(jù)庫里,在注銷或者token過期的時(shí)候還要更新數(shù)據(jù)庫的token,是因?yàn)锳uth底層獲取user的方法是從數(shù)據(jù)庫進(jìn)行獲取的
貼上源碼來看一波
首先還是vendorlaravelframeworksrcIlluminateAuthTokenGuard.php文件
這里插一下,如果是想把token放在header頭里傳值,還要在TokenGuard.php加入這一段
如果不加入這一段只能從body里面獲取token,頭里傳的token獲取不到,如果是我理解有誤,希望指出
回到原來,我們要說Auth::user()方法, 這個(gè)方法會(huì)先實(shí)例化一個(gè)guard守衛(wèi)指定的驅(qū)動(dòng),不指定的話就是默認(rèn)的
可以參考這段代碼vendorlaravelframeworksrcIlluminateAuthAuthManager.php
指定的話,就會(huì)去實(shí)例化指定的guard,比如Auth::guard("user")->user()
我們這里默認(rèn)的就是守衛(wèi)adminToken的驅(qū)動(dòng)就是token
當(dāng)我們調(diào)用Auth::user( ) 時(shí)會(huì)調(diào)用vendorlaravelframeworksrcIlluminateAuthTokenGuard.php里的
然后我們找到retrieveByCredentials()這個(gè)方法在vendorlaravelframeworksrcIlluminateAuthEloquentUserProvider.php
可以看出這個(gè)方法用token為條件在elquentModel里查出了一條userObject并返回給了我們
所以我們Auth::user() 得到的user對(duì)象是在model里用token查出來的,所以如果想使用此功能的話,數(shù)據(jù)庫里的token字段一定要保持更新
當(dāng)然你也可以拋棄不用,或者改變?cè)创a讓他從redis中取到token和對(duì)應(yīng)的id,再用id去model中取數(shù)據(jù)
這里理解了之后我們?cè)趯懸粋€(gè)middleware用來驗(yàn)證在訪問網(wǎng)站時(shí)token是否正確就行了
把新建的middleware加入kernel.php中
最后在要被驗(yàn)證的方法里的構(gòu)造方法里調(diào)用這個(gè)middleware就可以開啟我們得token驗(yàn)證了
如果你有某個(gè)方法不想使用驗(yàn)證, 可以使用except()方法把其排除了
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/30144.html
摘要:通過裝載看守器和用戶提供器裝載看守器和用戶提供器用到的方法比較多,用文字描述不太清楚,我們通過注解這個(gè)過程中用到的方法來看具體的實(shí)現(xiàn)細(xì)節(jié)。 用戶認(rèn)證系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié) 上一節(jié)我們介紹來Laravel Auth系統(tǒng)的基礎(chǔ)知識(shí),說了他的核心組件都有哪些構(gòu)成,這一節(jié)我們會(huì)專注Laravel Auth系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié),主要關(guān)注Auth也就是AuthManager是如何裝載認(rèn)證用的看守器(Guard)...
摘要:如何做用戶認(rèn)證根據(jù)文檔描述,提供用戶認(rèn)證的接口,他的核心是看守器和提供器,看守器定義怎么認(rèn)證用戶,提供器定義怎么檢索用戶。 最近的一個(gè)PHP項(xiàng)目,上一個(gè)項(xiàng)目是采用ThinkPHP來弄的,因?yàn)楹茉缇吐犝f過Laravel的大名,所以進(jìn)了Laravel的官網(wǎng),意外發(fā)現(xiàn)了Lumen,正好我項(xiàng)目是提供API的,所以選擇了Lumen,因?yàn)槭荓aravel的精簡版,看了幾天的Laravel文檔,也總...
摘要:中的中有一個(gè)組件叫,組件提供了整個(gè)框架的認(rèn)證功能,這里想簡單追蹤一下它的實(shí)現(xiàn)邏輯。 Laravel中的Auth laravel中有一個(gè)組件叫auth,auth組件提供了整個(gè)框架的認(rèn)證功能,這里想簡單追蹤一下它的實(shí)現(xiàn)邏輯。 首先從 php artisan make:auth?開始 # IlluminateAuthConsoleAuthMakeCommand.php public fu...
摘要:弊端顯而易見,如果另一個(gè)不是就抓瞎了,下面是另一種通用的解決方案在中重寫方法假設(shè)字段是假設(shè)字段是假設(shè)字段是可以看到雖然能解決問題,但是顯然有悖于的優(yōu)雅風(fēng)格,賣了這么多關(guān)子,下面跟大家分享一下我的解決方案。 解決方案: 登錄字段不超過兩個(gè)的(簡單的解決方案) 登錄字段大于或等于三個(gè)的(相對(duì)復(fù)雜一些) 登錄字段不超過兩個(gè)的 我在網(wǎng)上看到一種相對(duì)簡單解決方案,但是不能解決所有兩個(gè)字段的驗(yàn)...
摘要:如果該構(gòu)造函數(shù)在我們所期望的中運(yùn)行,就沒有任何祖先注入器能夠提供的實(shí)例,于是注入器會(huì)放棄查找。但裝飾器表示找不到該服務(wù)也無所謂。用處理導(dǎo)航到子路由的情況。路由器會(huì)先按照從最深的子路由由下往上檢查的順序來檢查守護(hù)條件。 第一節(jié):Angular 2.0 從0到1 (一)第二節(jié):Angular 2.0 從0到1 (二)第三節(jié):Angular 2.0 從0到1 (三)第四節(jié):Angular 2...
閱讀 2720·2021-09-09 09:33
閱讀 2890·2019-08-30 15:54
閱讀 2924·2019-08-30 14:21
閱讀 2426·2019-08-29 17:15
閱讀 3639·2019-08-29 16:13
閱讀 2818·2019-08-29 14:21
閱讀 3484·2019-08-26 13:25
閱讀 2081·2019-08-26 12:14