搜尋
首頁php框架Laravellaravel中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' => 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
行動中的Laravel:現實世界的應用和示例行動中的Laravel:現實世界的應用和示例Apr 16, 2025 am 12:02 AM

laravelcanbeeffectefection ininreal-worldapplications forbuildingscalablewebsolutions.1)ITSImplifieCrudoperationsInrestfulaPisusingEloquentorm.2)laravel'secosystem,包括Toolslikenova,包括Toolslikenova,增強功能

Laravel的主要功能:後端開發Laravel的主要功能:後端開發Apr 15, 2025 am 12:14 AM

Laravel在後端開發中的核心功能包括路由系統、EloquentORM、遷移功能、緩存系統和隊列系統。 1.路由系統簡化了URL映射,提高了代碼組織和維護性。 2.EloquentORM提供了面向對象的數據操作,提升了開發效率。 3.遷移功能通過版本控制管理數據庫結構,確保一致性。 4.緩存系統減少數據庫查詢,提升響應速度。 5.隊列系統有效處理大規模數據,避免阻塞用戶請求,提升整體性能。

Laravel的後端功能:數據庫,邏輯等等Laravel的後端功能:數據庫,邏輯等等Apr 14, 2025 am 12:04 AM

Laravel在後端開發中表現強大,通過EloquentORM簡化數據庫操作,控制器和服務類處理業務邏輯,並提供隊列、事件等功能。 1)EloquentORM通過模型映射數據庫表,簡化查詢。 2)業務邏輯在控制器和服務類中處理,提高模塊化和可維護性。 3)其他功能如隊列系統幫助處理複雜需求。

Laravel的多功能性:從簡單站點到復雜系統Laravel的多功能性:從簡單站點到復雜系統Apr 13, 2025 am 12:13 AM

選擇Laravel開發項目是因為其靈活性和強大功能適應不同規模和復雜度的需求。 Laravel提供路由系統、EloquentORM、Artisan命令行等功能,支持從簡單博客到復雜企業級系統的開發。

Laravel(PHP)與Python:開發環境和生態系統Laravel(PHP)與Python:開發環境和生態系統Apr 12, 2025 am 12:10 AM

Laravel和Python在開發環境和生態系統上的對比如下:1.Laravel的開發環境簡單,僅需PHP和Composer,提供了豐富的擴展包如LaravelForge,但擴展包維護可能不及時。 2.Python的開發環境也簡單,僅需Python和pip,生態系統龐大,涵蓋多個領域,但版本和依賴管理可能複雜。

Laravel和後端:為Web應用程序提供動力邏輯Laravel和後端:為Web應用程序提供動力邏輯Apr 11, 2025 am 11:29 AM

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

為什麼Laravel如此受歡迎?為什麼Laravel如此受歡迎?Apr 02, 2025 pm 02:16 PM

Laravel受歡迎的原因包括其簡化開發過程、提供愉快的開發環境和豐富的功能。 1)它吸收了RubyonRails的設計理念,結合PHP的靈活性。 2)提供瞭如EloquentORM、Blade模板引擎等工具,提高開發效率。 3)其MVC架構和依賴注入機制使代碼更加模塊化和可測試。 4)提供了強大的調試工具和性能優化方法,如緩存系統和最佳實踐。

django或laravel哪個更好?django或laravel哪個更好?Mar 28, 2025 am 10:41 AM

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),