首頁  >  文章  >  php框架  >  laravel中guard是什麼

laravel中guard是什麼

WBOY
WBOY原創
2022-06-02 17:54:253579瀏覽

在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' => 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() 是判斷使用者是否登入的方法,如果使用的預設使用者係統,那麼這樣使用就沒問題。

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

Auth::guard('api')->check() 就是用來判斷前台使用者是否登入Auth:: guard('web')->check() 就是用來判斷後台使用者是否登入

所以如果使用非預設使用者群組,則需要用guard來指定。

所以我們平常用的其實就是預設配置,寫全就應該是Auth::guard('web)->check()

【相關推薦:laravel視頻教程

以上是laravel中guard是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn