laravel中guard是什么

laravel中,guard是一個用于用戶認證的插件;guard的作用就是處理認證判斷每一個請求,從數據庫中讀取數據和用戶輸入的對比,調用是否登錄過或者允許通過的,并且Guard能非常靈活的構建一套自己的認證體系。

laravel中guard是什么

本文操作環境:Windows10系統、Laravel5.4版、Dell G3電腦。

laravel中guard

其實無論是Guard還是Provide,你都可以理解為。某個特定功能的插件。

他的作用是處理一個認證,來判斷每個請求、調用是否是登錄過,或者允許通過的,

什么是Guard

在Laravel/Lumen框架中,用戶的登錄/注冊的認證基本都已經封裝好了,開箱即用。而登錄/注冊認證的核心就是:

用戶的注冊信息存入數據庫(登記)

從數據庫中讀取數據和用戶輸入的對比(認證)

上述兩步是登錄/注冊的基本,可以看到都會涉及到數據庫的操作,這兩步框架底層已經幫我們做好了,而且考慮到了很多情況,比如用戶認證的數據表不是user表而是admin_user,認證字段是phone而不是email,等等一些問題都是Guard所要解決的,通過Guard可以指定使用哪個數據表什么字段等,Guard能非常靈活的構建一套自己的認證體系。

通俗地講,就是這樣:Guard就像是小區的門衛大叔,冷酷無情,不認人只認登記信息。

進小區之前大叔需要先檢查你的身份,驗證不通過大叔就不讓你進去。

如果是走路/騎車進去,大叔1需要檢查你的門禁卡,他拿出記錄了小區所有業主門禁卡信息的本子查看你這個門禁卡信息有沒有在這個本子上;

如果你開車進去,大叔2就從記錄了所有業主車牌號的本子中檢查你的車牌號,所以新業主要小區了需要告知門衛大叔們你的門禁卡信息或者車牌號,要不然大叔2不讓你進。

如果是物業管理員要進小區,門衛大叔3也只認登記信息,管理員出示他的管理員門禁卡,門衛大叔就會檢查記錄了管理員門禁卡信息的本子。

上面講的對應了框架中的多用戶認證:

走路/騎車的人 -> 門禁卡

開車的人 -> 車牌號

物業管理員 -> 門禁卡

門禁卡和車牌號都是不同的認證方式,而門衛大叔查看的本子就對應了不同數據庫中的用戶信息,這樣講是不是更容易理解了。

Lumen/Laravel中以中間件(Middleware)的方式提供了非常靈活的認證,通過簡單的配置就可以切換多個認證。

工作流程圖如下:

laravel中guard是什么

從圖中可以看到,一個Guard會涉及到三個部分,分別是:

  • Guard實現本身

  • User Provider用戶提供者,指定哪個數據表以什么方式獲取(eloquent/database

  • Authenticatable接口規定那些東西可以被認證,就是實現它的接口嘛

擴展知識:

Guard我的理解他應該是一個類似用戶認證的東西。

在 config/auth.php 中有配置 guards 的參數,可以看出來 web 和 api 是兩個 guards。

在平時的業務中api可能更多的是用戶前臺用戶的操作,而web更多的是后臺用戶的操作。

默認配置都是指向 users 的 provider。

/* ????|?Authentication?Guards ????|認證關卡 ????|?Next,?you?may?define?every?authentication?guard?for?your?application.?Of?course,?a?great?default?configuration?has?been?defined?for?you?here?which?uses?session?storage?and?the?Eloquent?user?provider. ????|接下來,你可能要為你的應用定義每個認證關卡。當然,已經為你定一了一個很不錯的默認配置。這里會使用會話儲存和用戶模型 ????|?All?authentication?drivers?have?a?user?provider.?This?defines?how?the?users?are?actually?retrieved?out?of?your?database?or?other?storage?mechanisms?used?by?this?application?to?persist?your?user's?data. ????|所有的認證驅動都有一個用戶提供者。這里定義了怎么實際上怎么從你的數據庫或者其他儲存機制中取出用戶。以便應用開保持你的用戶數據 ????|?Supported:?"session",?"token" ????|可選驅動:"session",?"token" ????*/ 'guards'?=>?[ ????????'web'?=>?[ ????????????'driver'?=>?'session', ????????????'provider'?=>?'users', ????????], ????????'api'?=>?[ ????????????'driver'?=>?'token', ????????????'provider'?=>?'users', ????????], ????],

接下來看看 provider 都有什么配置。

??/* ????|?User?Providers ????|用戶提供者 ????|?If?you?have?multiple?user?tables?or?models?you?may?configure?multiple?sources?which?represent?each?model?/?table.?These?sources?may?then?be?assigned?to?any?extra?authentication?guards?you?have?defined. ????|?如果你有多個用戶表或用戶模型,你可以配置多個代表用戶表或模型的資源。這些資源可能被分配給應用中你定義的其他認證關卡 ????|?Supported:?"database",?"eloquent" ????| ????*/ ?'providers'?=>?[ ????????'users'?=>?[ ????????????'driver'?=>?'eloquent', ????????????'model'?=>?AppUser::class, ????????], ????????//?'users'?=>?[ ????????//?????'driver'?=>?'database', ????????//?????'table'?=>?'users', ????????//?], ????],

在 providers 中有剛才看到的 users 配置了吧,這個就是配置laravel的用戶組,因為前臺和后臺用戶在一般的情況下是分開操作的。所以就可以在這里新建一個 admin 的用戶組,并配置。開箱默認只用 users。

相對的每個用戶組密碼操作應該也是不同的,所以這里還有 password 的配置。

??/* ????|?Resetting?Passwords ????|?密碼重置 ????|?You?may?specify?multiple?password?reset?configurations?if?you?have?more?than?one?user?table?or?model?in?the?application?and?you?want?to?have?separate?password?reset?settings?based?on?the?specific?user?types. ????|?如果你有多個用戶模型或表,并且想對不同用戶類型有特定的密碼重置,則可以配置多個特定的重置密碼 ????|?The?expire?time?is?the?number?of?minutes?that?the?reset?token?should?be?considered?valid.?This?security?feature?keeps?tokens?short-lived?so?they?have?less?time?to?be?guessed.?You?may?change?this?as?needed. ????|這個獲取時間是令牌過期的分鐘數,這個安全措施可以保證令牌保持段時間有效,因此有更少的時間被破解。你可以按照需要更改。 ????*/ ????'passwords'?=>?[ ????????'users'?=>?[ ????????????'provider'?=>?'users', ????????????'table'?=>?'password_resets', ????????????'expire'?=>?60, ????????], ????],

平時用于檢測登陸用戶,或者用戶是否登陸我們都用的是 Auth::check() 就可以檢測到,這是因為在使用默認配置的時候,guard自動配置為 users 用戶組。

??/* ????|?Authentication?Defaults ????|?默認認證配置 ????|?This?option?controls?the?default?authentication?"guard"?and?password?reset?options?for?your?application.?You?may?change?these?defaults?as?required,?but?they're?a?perfect?start?for?most?applications. ????|?這個就是應用的默認認證關卡個重置密碼,你可以按自己要求更改。但這是最適合一個新應用的配置 ????*/ ????'defaults'?=>?[ ????????'guard'?=>?'web', ????????'passwords'?=>?'users', ????],

web guard下指向的就是 users 模型。

但是當如果我們有兩個用戶組,前臺后臺的時候怎么進行驗證呢?

Auth::check() 是判斷用戶是否登錄的方法,如果使用的默認用戶系統,那這樣使用沒問題。

但是使用兩組用戶的話,就應該這樣操作:

Auth::guard(‘api’)->check() 就是用來判斷前臺用戶是否登錄 Auth::guard(‘web’)->check() 就是用來判斷后臺用戶是否登錄

所以如果使用非默認用戶組,則需要用guard來指定。

所以我們平時用的其實就是默認配置,寫全就應該是 Auth::guard(‘web)->check()

【相關推薦:laravel視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享