Skip to main content

什麼是 Fortify

Laravel Fortify 是與前端無關的驗證後端實作。提供登入、註冊、密碼重設、Email 驗證、2FA、Passkey 所需的所有路由與 Controller。
Fortify 不含 UI。它透過從啟動套件或自訂 UI 對 Fortify 路由送出請求來運作。
「前端無關」的設計思維非常重要。Blade、Inertia(React/Vue/Svelte)、API 等,各種前端 stack 都可以重複使用同一個驗證後端。這也是 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 的主要設定

在啟動套件中,Passkey(Features::passkeys())預設並未啟用。要啟用需新增至 features 陣列。

FortifyServiceProvider 的設定

啟動套件的 FortifyServiceProvider 擔負 3 個角色。

1. 設定 Action

透過置於 app/Actions/Fortify/ 的類別,可自訂使用者建立與密碼重設的邏輯。驗證與雜湊處理集中於此。

2. 設定 View

各檢視方法接受回傳 Inertia 元件的 closure。以 Features::enabled() 確認功能旗標並傳入檢視是重點。
在 Blade 應用程式中,將 Inertia::render(...) 替換為 view('auth.login') 回傳即可。即便更換前端,只要修改 FortifyServiceProvider 端即可,驗證邏輯不變。

3. 設定速率限制

  • login limiter:以 Email 與 IP 位址的組合限制(暴力破解對策)
  • two-factor limiter:以 session 內的登入嘗試 ID 限制
RateLimiter::for() 註冊與 config/fortify.phplimiters key 相符的 key。

主要功能與註冊的路由

以下依功能整理 Fortify 註冊的主要路由。 php artisan route:list --name=fortify 或直接使用 php artisan route:list 可確認實際註冊的路由。

雙因素驗證(2FA)

啟動套件中已啟用 Features::twoFactorAuthentication()confirmconfirmPassword 皆設為 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.phpfeatures 陣列加入。
接著在 User 模型加入 PasskeyUser contract 與 PasskeyAuthenticatable trait。
WebAuthn 設定於 config/fortify.phppasskeys key 管理。
Fortify 的 Passkey 內部包裝了 laravel/passkeys Composer 套件。無需公開 laravel/passkeys 的設定檔,會以 config/fortify.phppasskeys key 為優先。
有關 Passkey 詳細實作(@laravel/passkeys JS Client、React/Vue/Svelte helper 等),請參考Passkey 初步調查

相關頁面

自訂驗證 Guard

說明如何實作 Guard、StatefulGuard 介面以建立自訂驗證 Guard。

官方文件:Laravel Fortify

安裝、全部功能與自訂細節請參考官方文件。
最後修改於 2026年8月2日