Laravel Guard
Guard我的理解他應(yīng)該是一個(gè)類似用戶認(rèn)證的東西。
在 config/auth.php 中有配置 guards 的參數(shù),可以看出來 web 和 api 是兩個(gè) guards。
在平時(shí)的業(yè)務(wù)中api可能更多的是用戶前臺用戶的操作,而web更多的是后臺用戶的操作。
默認(rèn)配置都是指向 users 的 provider。
/*
| Authentication Guards
|認(rèn)證關(guān)卡
| 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.
|接下來,你可能要為你的應(yīng)用定義每個(gè)認(rèn)證關(guān)卡。當(dāng)然,已經(jīng)為你定一了一個(gè)很不錯(cuò)的默認(rèn)配置。這里會使用會話儲存和用戶模型
| 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.
|所有的認(rèn)證驅(qū)動都有一個(gè)用戶提供者。這里定義了怎么實(shí)際上怎么從你的數(shù)據(jù)庫或者其他儲存機(jī)制中取出用戶。以便應(yīng)用開保持你的用戶數(shù)據(jù)
| Supported: "session", "token"
|可選驅(qū)動:"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.
| 如果你有多個(gè)用戶表或用戶模型,你可以配置多個(gè)代表用戶表或模型的資源。這些資源可能被分配給應(yīng)用中你定義的其他認(rèn)證關(guān)卡
| Supported: "database", "eloquent"
|
*/
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
在 providers 中有剛才看到的 users 配置了吧,這個(gè)就是配置laravel的用戶組,因?yàn)榍芭_和后臺用戶在一般的情況下是分開操作的。所以就可以在這里新建一個(gè) admin 的用戶組,并配置。開箱默認(rèn)只用 users。
相對的每個(gè)用戶組密碼操作應(yīng)該也是不同的,所以這里還有 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.
| 如果你有多個(gè)用戶模型或表,并且想對不同用戶類型有特定的密碼重置,則可以配置多個(gè)特定的重置密碼
| 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.
|這個(gè)獲取時(shí)間是令牌過期的分鐘數(shù),這個(gè)安全措施可以保證令牌保持段時(shí)間有效,因此有更少的時(shí)間被破解。你可以按照需要更改。
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
平時(shí)用于檢測登陸用戶,或者用戶是否登陸我們都用的是 Auth::check() 就可以檢測到,這是因?yàn)樵谑褂媚J(rèn)配置的時(shí)候,guard自動配置為 users 用戶組。
/*
| Authentication Defaults
| 默認(rèn)認(rèn)證配置
| 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.
| 這個(gè)就是應(yīng)用的默認(rèn)認(rèn)證關(guān)卡個(gè)重置密碼,你可以按自己要求更改。但這是最適合一個(gè)新應(yīng)用的配置
*/
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
web guard下指向的就是 users 模型。
但是當(dāng)如果我們有兩個(gè)用戶組,前臺后臺的時(shí)候怎么進(jìn)行驗(yàn)證呢?
Auth::check() 是判斷用戶是否登錄的方法,如果使用的默認(rèn)用戶系統(tǒng),那這樣使用沒問題。
但是使用兩組用戶的話,就應(yīng)該這樣操作:
Auth::guard('api')->check() 就是用來判斷前臺用戶是否登錄 Auth::guard('web')->check() 就是用來判斷后臺用戶是否登錄
所以如果使用非默認(rèn)用戶組,則需要用guard來指定。
所以我們平時(shí)用的其實(shí)就是默認(rèn)配置,寫全就應(yīng)該是 Auth::guard(‘web)->check()