国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel - Auth驗證流程以及guard守衛和自定義驅動driver驅動,使用web-to

JinB / 1268人閱讀

摘要:不同認證方式我們先來看數組讓我們可以配置一個提供者每個提供者可以選擇不同的可以選擇或者對應的驅動之后選擇對應的配置項在擁有之后我們可以配置守衛守衛可以配置一個驅動者和一個提供者提供者就是我們上面配置的而驅動者則有認正認正可供選擇默認使用的是

不同認證方式

我們先來看 config/auth.php

provider

providers 數組讓我們可以配置一個提供者,每個提供者可以選擇不同的 driver.driver可以選擇eloquent 或者 database ,

對應的驅動之后選擇對應的配置項,eloquent:model,database:table

guard

在擁有provider之后我們可以配置guards 守衛,守衛可以配置一個驅動者和一個提供者

提供者就是我們上面配置的provider

而驅動者則有session(session認正),token(token認正)可供選擇

默認api使用的是token認正,而web用戶使用session認正

session認正

在認證時我們可以使用Auth::attempt(["email" => $email, "password" => $password])方法,此方法在驗證成功后會自動為這個用戶設置一個認證 Session,標識該用戶登錄成功

后面就可以使用Auth::guard()->check()方式驗證用戶是否已經登錄

token認正

此認正方式laravel雖然提供了驅動方法,但是并沒有默認它為驗證方式,也沒有提供自動生成token的方法,要使用此方法要自定義login方法

通過查看底層的vendorlaravelframeworksrcIlluminateAuthTokenGuard.php方法,我們可以發現laravel5.5底層默認的是token字段,我們也可以在此自定義此字段,在此我使用了web_token作為認正字段

然后我們還要在數據庫里建立相應的字段web_token

注:如果使用redis等nosql保存web_token的話也是需要web_token的,為了使laravel自帶的Auth門面可以使用

建立完字段以后就可以寫登錄方法了:

在這里還是使用了redis去保存token,便于設置token的過期時間

至于為什么還要保存在數據庫里,在注銷或者token過期的時候還要更新數據庫的token,是因為Auth底層獲取user的方法是從數據庫進行獲取的

貼上源碼來看一波

首先還是vendorlaravelframeworksrcIlluminateAuthTokenGuard.php文件

這里插一下,如果是想把token放在header頭里傳值,還要在TokenGuard.php加入這一段

如果不加入這一段只能從body里面獲取token,頭里傳的token獲取不到,如果是我理解有誤,希望指出

回到原來,我們要說Auth::user()方法, 這個方法會先實例化一個guard守衛指定的驅動,不指定的話就是默認的

可以參考這段代碼vendorlaravelframeworksrcIlluminateAuthAuthManager.php

指定的話,就會去實例化指定的guard,比如Auth::guard("user")->user()

我們這里默認的就是守衛adminToken的驅動就是token


當我們調用Auth::user( ) 時會調用vendorlaravelframeworksrcIlluminateAuthTokenGuard.php里的

然后我們找到retrieveByCredentials()這個方法在vendorlaravelframeworksrcIlluminateAuthEloquentUserProvider.php

可以看出這個方法用token為條件在elquentModel里查出了一條userObject并返回給了我們

所以我們Auth::user() 得到的user對象是在model里用token查出來的,所以如果想使用此功能的話,數據庫里的token字段一定要保持更新

當然你也可以拋棄不用,或者改變源碼讓他從redis中取到token和對應的id,再用id去model中取數據

這里理解了之后我們在寫一個middleware用來驗證在訪問網站時token是否正確就行了

把新建的middleware加入kernel.php

最后在要被驗證的方法里的構造方法里調用這個middleware就可以開啟我們得token驗證了

如果你有某個方法不想使用驗證, 可以使用except()方法把其排除了

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30144.html

相關文章

  • Laravel核心解讀--用戶認證系統的實現細節

    摘要:通過裝載看守器和用戶提供器裝載看守器和用戶提供器用到的方法比較多,用文字描述不太清楚,我們通過注解這個過程中用到的方法來看具體的實現細節。 用戶認證系統的實現細節 上一節我們介紹來Laravel Auth系統的基礎知識,說了他的核心組件都有哪些構成,這一節我們會專注Laravel Auth系統的實現細節,主要關注Auth也就是AuthManager是如何裝載認證用的看守器(Guard)...

    NicolasHe 評論0 收藏0
  • Lumen用戶認證JWT,源碼解讀

    摘要:如何做用戶認證根據文檔描述,提供用戶認證的接口,他的核心是看守器和提供器,看守器定義怎么認證用戶,提供器定義怎么檢索用戶。 最近的一個PHP項目,上一個項目是采用ThinkPHP來弄的,因為很早就聽說過Laravel的大名,所以進了Laravel的官網,意外發現了Lumen,正好我項目是提供API的,所以選擇了Lumen,因為是Laravel的精簡版,看了幾天的Laravel文檔,也總...

    AZmake 評論0 收藏0
  • Laravel中的Auth

    摘要:中的中有一個組件叫,組件提供了整個框架的認證功能,這里想簡單追蹤一下它的實現邏輯。 Laravel中的Auth laravel中有一個組件叫auth,auth組件提供了整個框架的認證功能,這里想簡單追蹤一下它的實現邏輯。 首先從 php artisan make:auth?開始 # IlluminateAuthConsoleAuthMakeCommand.php public fu...

    張漢慶 評論0 收藏0
  • Laravel 用戶多字段認證優雅解決方案

    摘要:弊端顯而易見,如果另一個不是就抓瞎了,下面是另一種通用的解決方案在中重寫方法假設字段是假設字段是假設字段是可以看到雖然能解決問題,但是顯然有悖于的優雅風格,賣了這么多關子,下面跟大家分享一下我的解決方案。 解決方案: 登錄字段不超過兩個的(簡單的解決方案) 登錄字段大于或等于三個的(相對復雜一些) 登錄字段不超過兩個的 我在網上看到一種相對簡單解決方案,但是不能解決所有兩個字段的驗...

    jk_v1 評論0 收藏0
  • Angular 2.x 從0到1 (五)史上最簡單的Angular2教程

    摘要:如果該構造函數在我們所期望的中運行,就沒有任何祖先注入器能夠提供的實例,于是注入器會放棄查找。但裝飾器表示找不到該服務也無所謂。用處理導航到子路由的情況。路由器會先按照從最深的子路由由下往上檢查的順序來檢查守護條件。 第一節:Angular 2.0 從0到1 (一)第二節:Angular 2.0 從0到1 (二)第三節:Angular 2.0 從0到1 (三)第四節:Angular 2...

    dcr309duan 評論0 收藏0

發表評論

0條評論

JinB

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<