十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
今天小編給大家分享一下laravel中guard指的是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
10年積累的成都網站設計、成都網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有玉龍免費網站建設讓你可以放心的選擇與我們合作。
在laravel中,guard是一個用于用戶認證的插件;guard的作用就是處理認證判斷每一個請求,從數據庫中讀取數據和用戶輸入的對比,調用是否登錄過或者允許通過的,并且Guard能非常靈活的構建一套自己的認證體系。
本文操作環(huán)境:Windows10系統(tǒng)、Laravel5.4版、Dell G3電腦。
其實無論是Guard還是Provide,你都可以理解為。某個特定功能的插件。
他的作用是處理一個認證,來判斷每個請求、調用是否是登錄過,或者允許通過的,
什么是Guard
在Laravel/Lumen框架中,用戶的登錄/注冊的認證基本都已經封裝好了,開箱即用。而登錄/注冊認證的核心就是:
用戶的注冊信息存入數據庫(登記)
從數據庫中讀取數據和用戶輸入的對比(認證)
上述兩步是登錄/注冊的基本,可以看到都會涉及到數據庫的操作,這兩步框架底層已經幫我們做好了,而且考慮到了很多情況,比如用戶認證的數據表不是user表而是admin_user,認證字段是phone而不是email,等等一些問題都是Guard所要解決的,通過Guard可以指定使用哪個數據表什么字段等,Guard能非常靈活的構建一套自己的認證體系。
通俗地講,就是這樣:Guard就像是小區(qū)的門衛(wèi)大叔,冷酷無情,不認人只認登記信息。
進小區(qū)之前大叔需要先檢查你的身份,驗證不通過大叔就不讓你進去。
如果是走路/騎車進去,大叔1需要檢查你的門禁卡,他拿出記錄了小區(qū)所有業(yè)主門禁卡信息的本子查看你這個門禁卡信息有沒有在這個本子上;
如果你開車進去,大叔2就從記錄了所有業(yè)主車牌號的本子中檢查你的車牌號,所以新業(yè)主要小區(qū)了需要告知門衛(wèi)大叔們你的門禁卡信息或者車牌號,要不然大叔2不讓你進。
如果是物業(yè)管理員要進小區(qū),門衛(wèi)大叔3也只認登記信息,管理員出示他的管理員門禁卡,門衛(wèi)大叔就會檢查記錄了管理員門禁卡信息的本子。
上面講的對應了框架中的多用戶認證:
走路/騎車的人 -> 門禁卡
開車的人 -> 車牌號
物業(yè)管理員 -> 門禁卡
門禁卡和車牌號都是不同的認證方式,而門衛(wèi)大叔查看的本子就對應了不同數據庫中的用戶信息,這樣講是不是更容易理解了。
Lumen/Laravel中以中間件(Middleware)的方式提供了非常靈活的認證,通過簡單的配置就可以切換多個認證。
一個Guard會涉及到三個部分,分別是:
Guard實現本身
User Provider用戶提供者,指定哪個數據表以什么方式獲取(eloquent/database)
Authenticatable接口規(guī)定那些東西可以被認證,就是實現它的接口嘛
擴展知識:
Guard我的理解他應該是一個類似用戶認證的東西。
在 config/auth.php 中有配置 guards 的參數,可以看出來 web 和 api 是兩個 guards。
在平時的業(yè)務中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' => App\User::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() 是判斷用戶是否登錄的方法,如果使用的默認用戶系統(tǒng),那這樣使用沒問題。
但是使用兩組用戶的話,就應該這樣操作:
Auth::guard('api')->check() 就是用來判斷前臺用戶是否登錄 Auth::guard('web')->check() 就是用來判斷后臺用戶是否登錄
所以如果使用非默認用戶組,則需要用guard來指定。
所以我們平時用的其實就是默認配置,寫全就應該是 Auth::guard(‘web)->check()
以上就是“l(fā)aravel中guard指的是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注創(chuàng)新互聯行業(yè)資訊頻道。