什麼是 Fortify
Laravel Fortify 是與前端無關的驗證後端實作。提供登入、註冊、密碼重設、Email 驗證、2FA、Passkey 所需的所有路由與 Controller。Fortify 不含 UI。它透過從啟動套件或自訂 UI 對 Fortify 路由送出請求來運作。
歷史:從 Jetstream 到現行啟動套件
為什麼現行啟動套件仍使用 Fortify
最初的 React/Vue 啟動套件並未使用 Fortify 實作。但當需要支援雙因素驗證(2FA)時,Fortify 被直接採用,整個驗證便切換為 Fortify 為基礎。 Fortify 因設計為「前端無關」,與使用 Inertia 的啟動套件契合度高,也因此持續被使用至今。Fortify 目前是持續使用時間最長的 Laravel 官方驗證套件。自 2020 年登場以來,從 Jetstream → 現行啟動套件不斷變換形式,仍持續在現役。
現行啟動套件的結構
在 React/Vue 啟動套件中,以下檔案設定了 Fortify。app/Providers/FortifyServiceProvider.php— 檢視、動作、速率限制的註冊config/fortify.php— 要啟用的功能與驗證設定
config/fortify.php 的主要設定
Features::passkeys())預設並未啟用。要啟用需新增至 features 陣列。
FortifyServiceProvider 的設定
啟動套件的 FortifyServiceProvider 擔負 3 個角色。
1. 設定 Action
app/Actions/Fortify/ 的類別,可自訂使用者建立與密碼重設的邏輯。驗證與雜湊處理集中於此。
2. 設定 View
Features::enabled() 確認功能旗標並傳入檢視是重點。
在 Blade 應用程式中,將
Inertia::render(...) 替換為 view('auth.login') 回傳即可。即便更換前端,只要修改 FortifyServiceProvider 端即可,驗證邏輯不變。3. 設定速率限制
loginlimiter:以 Email 與 IP 位址的組合限制(暴力破解對策)two-factorlimiter:以 session 內的登入嘗試 ID 限制
RateLimiter::for() 註冊與 config/fortify.php 之 limiters key 相符的 key。
主要功能與註冊的路由
以下依功能整理 Fortify 註冊的主要路由。
以
php artisan route:list --name=fortify 或直接使用 php artisan route:list 可確認實際註冊的路由。
雙因素驗證(2FA)
啟動套件中已啟用Features::twoFactorAuthentication()。confirm 與 confirmPassword 皆設為 true。
於 2FA 設定畫面中,使用者可以進行下列操作。
1
啟用 2FA
對
/user/two-factor-authentication 送出 POST 請求。成功後 session 中會設定 two-factor-authentication-enabled 狀態。2
確認 QR code
對
/user/two-factor-qr-code 送出 GET 請求,會回傳供驗證 App 讀取的 QR code SVG。3
以驗證碼確認
對
/user/confirmed-two-factor-authentication 以 POST 送出驗證碼以完成設定。4
保存 Recovery Code
對
/user/two-factor-recovery-codes 送出 GET 請求取得 Recovery Code,並保存於安全處。Passkey
Passkey 是 Fortify 較新加入的功能。這是使用 WebAuthn 的無密碼驗證,支援 Face ID、Touch ID、Windows Hello 與硬體 Security Key。啟用
於config/fortify.php 的 features 陣列加入。
User 模型加入 PasskeyUser contract 與 PasskeyAuthenticatable trait。
config/fortify.php 的 passkeys key 管理。
Fortify 的 Passkey 內部包裝了
laravel/passkeys Composer 套件。無需公開 laravel/passkeys 的設定檔,會以 config/fortify.php 的 passkeys key 為優先。@laravel/passkeys JS Client、React/Vue/Svelte helper 等),請參考Passkey 初步調查。
相關頁面
自訂驗證 Guard
說明如何實作 Guard、StatefulGuard 介面以建立自訂驗證 Guard。
官方文件:Laravel Fortify
安裝、全部功能與自訂細節請參考官方文件。