Skip to main content

Fortify とは

Laravel Fortify は、フロントエンドに依存しない認証バックエンド実装です。ログイン・登録・パスワードリセット・メール確認・2FA・パスキーに必要なルートとコントローラーをすべて提供します。
Fortify は UI を持ちません。スターターキットや独自の UI から Fortify のルートにリクエストを送ることで機能します。
「フロントエンド非依存」という設計思想が重要です。Blade・Inertia(React/Vue/Svelte)・API など、どのフロントエンドスタックでも同じ認証バックエンドを再利用できます。これが 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. アクションの設定

app/Actions/Fortify/ に配置されたクラスでユーザー作成とパスワードリセットのロジックをカスタマイズします。バリデーションやハッシュ処理はここに集約されています。

2. ビューの設定

各ビューメソッドは Inertia コンポーネントを返すクロージャを受け取ります。Features::enabled() で機能フラグを確認してビューに渡しているのがポイントです。
Blade アプリでは Inertia::render(...) の代わりに view('auth.login') を返します。フロントエンドを変えても FortifyServiceProvider 側だけ修正すれば認証ロジックは変わりません。

3. レート制限の設定

  • login リミッター: メールアドレスと IP アドレスの組み合わせで制限(ブルートフォース対策)
  • two-factor リミッター: セッション内のログイン試行 ID で制限
config/fortify.phplimiters キーと一致するキーを RateLimiter::for() に登録します。

主な機能と登録されるルート

Fortify が登録する主なルートを機能別に整理します。 php artisan route:list --name=fortify または単純に php artisan route:list で実際に登録されているルートを確認できます。

二要素認証(2FA)

スターターキットでは Features::twoFactorAuthentication() が有効化されています。confirmconfirmPassword はどちらも true に設定されています。 2FA の設定画面から、ユーザーは以下の操作を行えます。
1

2FA を有効化する

/user/two-factor-authentication に POST リクエストを送信します。成功するとセッションに two-factor-authentication-enabled ステータスがセットされます。
2

QR コードを確認する

/user/two-factor-qr-code に GET リクエストを送ると、認証アプリに読み込む QR コードの SVG が返されます。
3

認証コードで確認する

/user/confirmed-two-factor-authentication に POST リクエストでコードを送信し、設定を完了します。
4

リカバリーコードを保存する

/user/two-factor-recovery-codes に GET リクエストを送り、リカバリーコードを取得して安全な場所に保存します。

パスキー

パスキーは Fortify の機能として最近追加されました。WebAuthn を使ったパスワードレス認証で、Face ID・Touch ID・Windows Hello・ハードウェアセキュリティキーに対応しています。

有効化

config/fortify.phpfeatures 配列に追加します。
次に、User モデルに PasskeyUser コントラクトと PasskeyAuthenticatable トレイトを追加します。
WebAuthn 設定は config/fortify.phppasskeys キーで管理します。
Fortify のパスキーは内部で laravel/passkeys Composer パッケージをラップしています。laravel/passkeys の設定ファイルを公開する必要はなく、config/fortify.phppasskeys キーが優先されます。
パスキーの詳細な実装(@laravel/passkeys JS クライアント、React/Vue/Svelte ヘルパーなど)については、パスキー初期調査も参照してください。

関連ページ

カスタム認証ガード

Guard・StatefulGuard インターフェースを実装してカスタム認証ガードを作る方法を解説します。

公式ドキュメント: Laravel Fortify

インストール・全機能・カスタマイズの詳細は公式ドキュメントを参照してください。
最終更新日 2026年5月5日