サイトを更新しています。 数日間、レイアウトや翻訳に不具合が出ることがあります。ドキュメントは引き続きご利用いただけます。表示が崩れている場合は、後ほど再読み込みしてください。

ホーム Laravel 10.x Laravel Fortify

Laravel Fortify

10.x 2026年3月7日

#はじめに

Laravel Fortify は、Laravel向けのフロントエンドに依存しない認証バックエンド実装です。Fortifyは、ログイン、登録、パスワードリセット、メール認証など、Laravelの認証機能を実装するために必要なルートとコントローラーを登録します。Fortifyをインストールした後、route:list Artisanコマンドを実行すると、Fortifyが登録したルートを確認できます。

Fortifyは独自のユーザーインターフェースを提供しないため、登録されたルートにリクエストを送る独自のUIと組み合わせて使うことを想定しています。このドキュメントの残りの部分で、これらのルートへのリクエスト方法を詳しく説明します。

Примечание

FortifyはLaravelの認証機能を実装するためのスタート地点を提供するパッケージです。必ずしも使う必要はありません。 いつでも認証パスワードリセットメール認証のドキュメントに従って、Laravelの認証サービスを手動で操作できます。

#Fortifyとは?

前述の通り、Laravel FortifyはLaravel向けのフロントエンドに依存しない認証バックエンド実装です。Fortifyはログイン、登録、パスワードリセット、メール認証など、Laravelの認証機能を実装するために必要なルートとコントローラーを登録します。

Laravelの認証機能を使うためにFortifyを使う必要はありません。 いつでも認証パスワードリセットメール認証のドキュメントに従って、Laravelの認証サービスを手動で操作できます。

Laravelに慣れていない場合は、Laravel Fortifyを使う前にLaravel Breezeのアプリケーションスターターキットを試してみることをおすすめします。Laravel BreezeはTailwind CSSで構築されたユーザーインターフェースを含む認証スキャフォールドを提供します。Fortifyとは異なり、Breezeはルートとコントローラーを直接アプリケーションに公開します。これにより、Laravelの認証機能を学び、理解した上でFortifyに任せることができます。

Laravel Fortifyは基本的にLaravel Breezeのルートとコントローラーをパッケージ化し、ユーザーインターフェースを含まない形で提供します。これにより、特定のフロントエンドに縛られずにアプリケーションの認証バックエンドを素早く構築できます。

#Fortifyはいつ使うべき?

Laravelのアプリケーションスターターキットを使っている場合は、すでに完全な認証実装が含まれているため、Laravel Fortifyをインストールする必要はありません。

アプリケーションスターターキットを使っておらず、認証機能が必要な場合は、認証機能を手動で実装するか、Laravel Fortifyを使ってバックエンド実装を提供するかのどちらかを選べます。

Fortifyをインストールした場合、ユーザーインターフェースはこのドキュメントで説明するFortifyの認証ルートにリクエストを送ってユーザーの認証や登録を行います。

Fortifyを使わずにLaravelの認証サービスを手動で操作したい場合は、認証パスワードリセットメール認証のドキュメントに従ってください。

#Laravel FortifyとLaravel Sanctum

一部の開発者は Laravel Sanctum と Laravel Fortify の違いを混同することがあります。これら2つのパッケージは関連はあるものの別々の問題を解決するため、Laravel Fortify と Laravel Sanctum は相互に排他的でも競合するパッケージでもありません。

Laravel SanctumはAPIトークンの管理と、セッションクッキーやトークンを使った既存ユーザーの認証にのみ関心があります。ユーザー登録やパスワードリセットなどを扱うルートは提供しません。

APIを提供するアプリケーションやシングルページアプリケーションのバックエンドを手動で構築する場合、Laravel Fortify(ユーザー登録、パスワードリセットなど)とLaravel Sanctum(APIトークン管理、セッション認証)の両方を利用することも可能です。

#インストール

まずはComposerパッケージマネージャーを使ってFortifyをインストールします:

composer require laravel/fortify

次に、vendor:publishコマンドでFortifyのリソースを公開します:

php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"

このコマンドは、Fortifyのアクションをapp/Actionsディレクトリに公開します(存在しない場合は作成されます)。さらに、FortifyServiceProvider、設定ファイル、必要なデータベースマイグレーションも公開されます。

次に、データベースのマイグレーションを実行してください:

php artisan migrate

#Fortifyサービスプロバイダー

前述のvendor:publishコマンドはApp\Providers\FortifyServiceProviderクラスも公開します。このクラスがアプリケーションのconfig/app.php設定ファイルのproviders配列に登録されていることを確認してください。

FortifyサービスプロバイダーはFortifyが公開したアクションを登録し、それらのタスクが実行される際にFortifyがそれらを使うよう指示します。

#Fortifyの機能

fortify設定ファイルにはfeatures設定配列があります。この配列はFortifyがデフォルトで公開するバックエンドのルートや機能を定義します。FortifyをLaravel Jetstreamと組み合わせて使わない場合は、ほとんどのLaravelアプリケーションで提供される基本的な認証機能のみを有効にすることを推奨します:

'features' => [
    Features::registration(),
    Features::resetPasswords(),
    Features::emailVerification(),
],

#ビューの無効化

デフォルトでFortifyはログイン画面や登録画面などのビューを返すルートを定義します。しかし、JavaScript駆動のシングルページアプリケーションを構築している場合、これらのルートは不要かもしれません。その場合は、アプリケーションのconfig/fortify.php設定ファイルのviews設定値をfalseに設定して、これらのルートを完全に無効化できます:

'views' => false,

#ビューの無効化とパスワードリセット

Fortifyのビューを無効化し、パスワードリセット機能を実装する場合は、アプリケーションの「パスワードリセット」ビューを表示する責任を持つpassword.resetという名前のルートを定義する必要があります。これはLaravelのIlluminate\Auth\Notifications\ResetPassword通知がpassword.reset名前付きルートを使ってパスワードリセットURLを生成するためです。

#認証

まず、Fortifyに「ログイン」ビューを返す方法を指示する必要があります。Fortifyはヘッドレス認証ライブラリです。Laravelの認証機能のフロントエンド実装がすでに完成しているものを使いたい場合は、アプリケーションスターターキットを使うべきです。

認証ビューのレンダリングロジックはすべて、Laravel\Fortify\Fortifyクラスの適切なメソッドを使ってカスタマイズできます。通常はアプリケーションのApp\Providers\FortifyServiceProviderクラスのbootメソッドからこのメソッドを呼び出します。Fortifyはこのビューを返す/loginルートを定義します:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::loginView(function () {
        return view('auth.login');
    });

    // ...
}

ログインテンプレートには/loginにPOSTリクエストを送るフォームを含めるべきです。/loginエンドポイントは文字列のemailまたはusernamepasswordを期待します。email/usernameフィールドの名前はconfig/fortify.php設定ファイルのusername値と一致させる必要があります。さらに、ユーザーがLaravelの「remember me」機能を使いたい場合は、真偽値のrememberフィールドを送信できます。

ログインが成功すると、Fortifyはアプリケーションのfortify設定ファイルのhome設定オプションで指定されたURIにリダイレクトします。XHRリクエストの場合は200 HTTPレスポンスが返されます。

リクエストが失敗した場合、ユーザーはログイン画面にリダイレクトされ、バリデーションエラーは共有された$errorsBladeテンプレート変数で利用可能です。XHRリクエストの場合は422 HTTPレスポンスと共にバリデーションエラーが返されます。

#ユーザー認証のカスタマイズ

Fortifyは提供された認証情報とアプリケーションで設定された認証ガードに基づいて自動的にユーザーを取得し認証します。しかし、ログイン認証情報の認証方法やユーザーの取得方法を完全にカスタマイズしたい場合もあります。FortifyはFortify::authenticateUsingメソッドを使ってこれを簡単に実現できます。

このメソッドはクロージャを受け取り、クロージャは受け取ったHTTPリクエストを検証し、認証情報を検証して関連するユーザーインスタンスを返す責任があります。認証情報が無効またはユーザーが見つからない場合は、クロージャはnullまたはfalseを返すべきです。通常、このメソッドはFortifyServiceProviderbootメソッドから呼び出します:

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::authenticateUsing(function (Request $request) {
        $user = User::where('email', $request->email)->first();

        if ($user &&
            Hash::check($request->password, $user->password)) {
            return $user;
        }
    });

    // ...
}

#認証ガード

Fortifyで使用する認証ガードは、アプリケーションのfortify設定ファイル内でカスタマイズできます。ただし、設定するガードはIlluminate\Contracts\Auth\StatefulGuardの実装である必要があります。SPAの認証にLaravel Fortifyを使用する場合は、LaravelのデフォルトのwebガードとLaravel Sanctumを組み合わせて使用してください。

#認証パイプラインのカスタマイズ

Laravel Fortifyは、呼び出し可能なクラスのパイプラインを通じてログインリクエストを認証します。必要に応じて、ログインリクエストが通過するカスタムパイプラインのクラスを定義できます。各クラスは、受け取ったIlluminate\Http\Requestインスタンスと、ミドルウェアのようにリクエストを次のクラスに渡すために呼び出す$next変数を受け取る__invokeメソッドを持つ必要があります。

カスタムパイプラインを定義するには、Fortify::authenticateThroughメソッドを使用します。このメソッドはクロージャを受け取り、ログインリクエストを通すクラスの配列を返す必要があります。通常、このメソッドはApp\Providers\FortifyServiceProviderクラスのbootメソッド内で呼び出します。

以下の例は、独自の変更を加える際の出発点として使えるデフォルトのパイプライン定義を含んでいます:

use Laravel\Fortify\Actions\AttemptToAuthenticate;
use Laravel\Fortify\Actions\EnsureLoginIsNotThrottled;
use Laravel\Fortify\Actions\PrepareAuthenticatedSession;
use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;
use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;

Fortify::authenticateThrough(function (Request $request) {
    return array_filter([
            config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
            Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null,
            AttemptToAuthenticate::class,
            PrepareAuthenticatedSession::class,
    ]);
});

#リダイレクトのカスタマイズ

ログインが成功すると、Fortifyはアプリケーションのfortify設定ファイル内のhome設定オプションで指定されたURIにリダイレクトします。ログインリクエストがXHRリクエストの場合は、200のHTTPレスポンスが返されます。ユーザーがログアウトすると、/ URIにリダイレクトされます。

この動作を高度にカスタマイズしたい場合は、LoginResponseLogoutResponse契約の実装をLaravelのサービスコンテナにバインドできます。通常は、アプリケーションのApp\Providers\FortifyServiceProviderクラスのregisterメソッド内で行います。

use Laravel\Fortify\Contracts\LogoutResponse;

/**
 * アプリケーションサービスを登録します。
 */
public function register(): void
{
    $this->app->instance(LogoutResponse::class, new class implements LogoutResponse {
        public function toResponse($request)
        {
            return redirect('/');
        }
    });
}

#二要素認証

Fortifyの二要素認証機能が有効な場合、認証プロセス中にユーザーは6桁の数字トークンを入力する必要があります。このトークンは、Google AuthenticatorなどのTOTP対応のモバイル認証アプリから取得できる時間ベースのワンタイムパスワード(TOTP)を使って生成されます。

まず、アプリケーションのApp\Models\UserモデルがLaravel\Fortify\TwoFactorAuthenticatableトレイトを使用していることを確認してください。

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;

class User extends Authenticatable
{
    use Notifiable, TwoFactorAuthenticatable;
}

Next, you should build a screen within your application where users can manage their two factor authentication settings. This screen should allow the user to enable and disable two factor authentication, as well as regenerate their two factor authentication recovery codes.

By default, the features array of the fortify configuration file instructs Fortify's two factor authentication settings to require password confirmation before modification. Therefore, your application should implement Fortify's password confirmation feature before continuing.

#Enabling Two Factor Authentication

To begin enabling two factor authentication, your application should make a POST request to the /user/two-factor-authentication endpoint defined by Fortify. If the request is successful, the user will be redirected back to the previous URL and the status session variable will be set to two-factor-authentication-enabled. You may detect this status session variable within your templates to display the appropriate success message. If the request was an XHR request, 200 HTTP response will be returned.

After choosing to enable two factor authentication, the user must still "confirm" their two factor authentication configuration by providing a valid two factor authentication code. So, your "success" message should instruct the user that two factor authentication confirmation is still required:

@if (session('status') == 'two-factor-authentication-enabled')
    <div class="mb-4 font-medium text-sm">
        Please finish configuring two factor authentication below.
    </div>
@endif

次に、ユーザーが認証アプリにスキャンできるように二要素認証のQRコードを表示します。Bladeでフロントエンドをレンダリングしている場合は、ユーザーインスタンスのtwoFactorQrCodeSvgメソッドでQRコードのSVGを取得できます。

$request->user()->twoFactorQrCodeSvg();

JavaScriptで構築されたフロントエンドの場合は、/user/two-factor-qr-codeエンドポイントにXHRのGETリクエストを送信してユーザーの二要素認証QRコードを取得できます。このエンドポイントはsvgキーを含むJSONオブジェクトを返します。

#二要素認証の確認

ユーザーの二要素認証QRコードを表示するだけでなく、ユーザーが有効な認証コードを入力して二要素認証設定を「確認」できるテキスト入力欄を用意してください。このコードはFortifyが定義する/user/confirmed-two-factor-authenticationエンドポイントにPOSTリクエストで送信されます。

リクエストが成功すると、ユーザーは前のURLにリダイレクトされ、statusセッション変数にtwo-factor-authentication-confirmedが設定されます。

@if (session('status') == 'two-factor-authentication-confirmed')
    <div class="mb-4 font-medium text-sm">
        Two factor authentication confirmed and enabled successfully.
    </div>
@endif

二要素認証確認エンドポイントへのリクエストがXHRリクエストの場合、200のHTTPレスポンスが返されます。

#リカバリーコードの表示

ユーザーの二要素認証リカバリーコードも表示してください。これらのリカバリーコードは、ユーザーがモバイルデバイスにアクセスできなくなった場合に認証するために使えます。Bladeでフロントエンドをレンダリングしている場合は、認証済みユーザーインスタンスからリカバリーコードにアクセスできます。

(array) $request->user()->recoveryCodes()

JavaScriptで構築されたフロントエンドの場合は、/user/two-factor-recovery-codesエンドポイントにXHRのGETリクエストを送信できます。このエンドポイントはユーザーのリカバリーコードを含むJSON配列を返します。

ユーザーのリカバリーコードを再生成するには、アプリケーションは/user/two-factor-recovery-codesエンドポイントにPOSTリクエストを送信する必要があります。

#二要素認証での認証

認証プロセス中、Fortifyは自動的にユーザーを二要素認証チャレンジ画面にリダイレクトします。ただし、アプリケーションがXHRログインリクエストを行っている場合、成功時のJSONレスポンスにtwo_factorという真偽値プロパティが含まれます。この値を確認して、二要素認証チャレンジ画面にリダイレクトすべきか判断してください。

二要素認証機能を実装するには、Fortifyに二要素認証チャレンジビューの返し方を指示する必要があります。Fortifyの認証ビューのレンダリングロジックは、Laravel\Fortify\Fortifyクラスの適切なメソッドでカスタマイズできます。通常は、アプリケーションのApp\Providers\FortifyServiceProviderクラスのbootメソッド内で呼び出します。

use Laravel\Fortify\Fortify;

/**
 * アプリケーションサービスをブートストラップします。
 */
public function boot(): void
{
    Fortify::twoFactorChallengeView(function () {
        return view('auth.two-factor-challenge');
    });

    // ...
}

Fortifyはこのビューを返す/two-factor-challengeルートの定義を行います。two-factor-challengeテンプレートには、/two-factor-challengeエンドポイントへPOSTリクエストを送信するフォームを含めてください。/two-factor-challengeアクションは、有効なTOTPトークンを含むcodeフィールド、またはユーザーのリカバリーコードのうちの1つを含むrecovery_codeフィールドを期待します。

ログインが成功すると、Fortifyはアプリケーションのfortify設定ファイル内のhome設定オプションで指定されたURIにリダイレクトします。ログインリクエストがXHRリクエストの場合は、204のHTTPレスポンスが返されます。

リクエストが失敗した場合、ユーザーは二要素認証チャレンジ画面にリダイレクトされ、検証エラーは共有された$errorsBladeテンプレート変数で利用可能です。XHRリクエストの場合は、検証エラーが422のHTTPレスポンスで返されます。

#二要素認証の無効化

二要素認証を無効にするには、アプリケーションは/user/two-factor-authenticationエンドポイントにDELETEリクエストを送信します。Fortifyの二要素認証エンドポイントは呼び出し前にパスワード確認が必要です。

#登録

アプリケーションの登録機能を実装するには、Fortifyに「register」ビューの返し方を指示する必要があります。Fortifyはヘッドレス認証ライブラリです。Laravelの認証機能をすでに実装済みのフロントエンドが必要な場合は、アプリケーションスターターキットを使用してください。

Fortifyのビューのレンダリングロジックは、Laravel\Fortify\Fortifyクラスの適切なメソッドでカスタマイズできます。通常は、App\Providers\FortifyServiceProviderクラスのbootメソッド内で呼び出します。

use Laravel\Fortify\Fortify;

/**
 * アプリケーションサービスをブートストラップします。
 */
public function boot(): void
{
    Fortify::registerView(function () {
        return view('auth.register');
    });

    // ...
}

Fortifyはこのビューを返す/registerルートを定義します。registerテンプレートには、Fortifyが定義する/registerエンドポイントにPOSTリクエストを送るフォームを含める必要があります。

/registerエンドポイントは、文字列のname、文字列のメールアドレスまたはユーザー名、passwordpassword_confirmationフィールドを期待します。メールアドレス/ユーザー名フィールドの名前は、アプリケーションのfortify設定ファイル内のusername設定値と一致させる必要があります。

登録が成功すると、Fortifyはアプリケーションのfortify設定ファイル内のhome設定オプションで指定されたURIにリダイレクトします。リクエストがXHRリクエストの場合は、201のHTTPレスポンスが返されます。

リクエストが失敗した場合、ユーザーは登録画面にリダイレクトされ、検証エラーは共有された$errorsBladeテンプレート変数で利用可能です。XHRリクエストの場合は、検証エラーが422のHTTPレスポンスで返されます。

#登録のカスタマイズ

ユーザーの検証と作成処理は、Laravel Fortifyをインストールした際に生成されたApp\Actions\Fortify\CreateNewUserアクションを修正してカスタマイズできます。

アプリケーションのパスワードリセット機能を実装するには、Fortifyに「パスワードを忘れた」ビューの返し方を指示する必要があります。Fortifyはヘッドレス認証ライブラリです。Laravelの認証機能をすでに実装済みのフロントエンドが必要な場合は、アプリケーションスターターキットを使用してください。

Fortifyのビューのレンダリングロジックは、Laravel\Fortify\Fortifyクラスの適切なメソッドでカスタマイズできます。通常は、アプリケーションのApp\Providers\FortifyServiceProviderクラスのbootメソッド内で呼び出します。

use Laravel\Fortify\Fortify;

/**
 * アプリケーションサービスをブートストラップします。
 */
public function boot(): void
{
    Fortify::requestPasswordResetLinkView(function () {
        return view('auth.forgot-password');
    });

    // ...
}

Fortifyはこのビューを返す/forgot-passwordエンドポイントを定義します。forgot-passwordテンプレートには、/forgot-passwordエンドポイントにPOSTリクエストを送るフォームを含める必要があります。

/forgot-passwordエンドポイントは、文字列のemailフィールドを期待します。このフィールド名/データベースカラム名は、アプリケーションのfortify設定ファイル内のemail設定値と一致させる必要があります。

#パスワードリセットリンクリクエストのレスポンス処理

パスワードリセットリンクのリクエストが成功すると、Fortifyはユーザーを/forgot-passwordエンドポイントにリダイレクトし、パスワードをリセットするための安全なリンクを含むメールを送信します。リクエストがXHRリクエストの場合は、200のHTTPレスポンスが返されます。

成功後に/forgot-passwordエンドポイントにリダイレクトされた後、statusセッション変数を使ってパスワードリセットリンクリクエストの状態を表示できます。

$statusセッション変数の値は、アプリケーションのpasswords言語ファイルに定義された翻訳文字列のいずれかと一致します。この値をカスタマイズしたい場合でLaravelの言語ファイルを公開していなければ、lang:publish Artisanコマンドで公開できます。

@if (session('status'))
    <div class="mb-4 font-medium text-sm text-green-600">
        {{ session('status') }}
    </div>
@endif

リクエストが成功しなかった場合、ユーザーはパスワードリセットリンクのリクエスト画面にリダイレクトされ、バリデーションエラーは共有された $errorsBladeテンプレート変数で利用できます。XHRリクエストの場合は、バリデーションエラーが422 HTTPレスポンスと共に返されます。

#パスワードのリセット

アプリケーションのパスワードリセット機能を完成させるために、Fortifyに「パスワードリセット」ビューを返す方法を指示する必要があります。

Fortifyのビュー描画ロジックはすべて、Laravel\Fortify\Fortify クラスの適切なメソッドを使ってカスタマイズできます。通常は、アプリケーションの App\Providers\FortifyServiceProvider クラスの boot メソッド内でこのメソッドを呼び出します。

use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;

/**
 * アプリケーションサービスの初期化。
 */
public function boot(): void
{
    Fortify::resetPasswordView(function (Request $request) {
        return view('auth.reset-password', ['request' => $request]);
    });

    // ...
}

Fortifyはこのビューを表示するルートの定義を自動で行います。reset-password テンプレートには、/reset-password にPOSTリクエストを送るフォームを含めてください。

/reset-password エンドポイントは、文字列の email フィールド、password フィールド、password_confirmation フィールド、および request()->route('token') の値を含む隠しフィールド token を期待します。 "email" フィールド名/データベースカラム名は、アプリケーションの fortify 設定ファイル内の email 設定値と一致させてください。

#パスワードリセットのレスポンス処理

パスワードリセットリクエストが成功した場合、Fortifyはユーザーを /login ルートにリダイレクトし、新しいパスワードでログインできるようにします。さらに、status セッション変数が設定され、ログイン画面でリセット成功の状態を表示できます。

@if (session('status'))
    <div class="mb-4 font-medium text-sm text-green-600">
        {{ session('status') }}
    </div>
@endif

リクエストがXHRの場合は、200 HTTPレスポンスが返されます。

リクエストが成功しなかった場合、ユーザーはパスワードリセット画面にリダイレクトされ、バリデーションエラーは共有された $errorsBladeテンプレート変数で利用できます。XHRリクエストの場合は、バリデーションエラーが422 HTTPレスポンスと共に返されます。

#パスワードリセットのカスタマイズ

パスワードリセット処理は、Laravel Fortifyをインストールした際に生成された App\Actions\ResetUserPassword アクションを修正することでカスタマイズできます。

登録後、ユーザーにメールアドレスの認証を求めたい場合があります。まず、fortify 設定ファイルの features 配列で emailVerification 機能が有効になっていることを確認してください。次に、App\Models\User クラスが Illuminate\Contracts\Auth\MustVerifyEmail インターフェイスを実装していることを確認します。

これらの設定が完了すると、新規登録ユーザーにメールアドレスの所有権を確認するメールが送信されます。ただし、Fortifyにメール認証画面の表示方法を指示する必要があります。この画面は、ユーザーにメール内の認証リンクをクリックするよう促します。

Fortifyのビュー描画ロジックはすべて、Laravel\Fortify\Fortify クラスの適切なメソッドを使ってカスタマイズできます。通常は、アプリケーションの App\Providers\FortifyServiceProvider クラスの boot メソッド内でこのメソッドを呼び出します。

use Laravel\Fortify\Fortify;

/**
 * アプリケーションサービスの初期化。
 */
public function boot(): void
{
    Fortify::verifyEmailView(function () {
        return view('auth.verify-email');
    });

    // ...
}

Fortifyは、Laravelの組み込み verified ミドルウェアによってユーザーが /email/verify エンドポイントにリダイレクトされた際に、このビューを表示するルートの定義を自動で行います。

verify-email テンプレートには、ユーザーに送信されたメールの認証リンクをクリックするよう促す案内メッセージを含めてください。

#メール認証リンクの再送信

必要に応じて、アプリケーションの verify-email テンプレートに、/email/verification-notification エンドポイントへPOSTリクエストを送るボタンを追加できます。このエンドポイントにリクエストが届くと、新しい認証メールリンクがユーザーに送信され、誤って削除したり紛失した場合に再取得できます。

認証リンク再送信リクエストが成功した場合、Fortifyはユーザーを /email/verify エンドポイントにリダイレクトし、status セッション変数を設定します。これにより、操作が成功したことをユーザーに通知できます。XHRリクエストの場合は、202 HTTPレスポンスが返されます。

@if (session('status') == 'verification-link-sent')
    <div class="mb-4 font-medium text-sm text-green-600">
        A new email verification link has been emailed to you!
    </div>
@endif

#ルートの保護

ルートまたはルートグループにメール認証済みのユーザーのみアクセス可能にしたい場合、Laravelの組み込み verified ミドルウェアをルートに適用してください。このミドルウェアはアプリケーションの App\Http\Kernel クラスで登録されています。

Route::get('/dashboard', function () {
    // ...
})->middleware(['verified']);

パスワード確認

アプリケーション開発中に、特定の操作を実行する前にユーザーにパスワードの確認を求めたい場合があります。通常、これらのルートはLaravelの組み込み password.confirm ミドルウェアで保護されます。

パスワード確認機能を実装するには、Fortifyにアプリケーションの「パスワード確認」ビューを返す方法を指示する必要があります。Fortifyはヘッドレス認証ライブラリです。Laravelの認証機能をすでに実装済みのフロントエンドが欲しい場合は、アプリケーションのスターターキットを利用してください。

Fortifyのビュー描画ロジックはすべて、Laravel\Fortify\Fortify クラスの適切なメソッドを使ってカスタマイズできます。通常は、アプリケーションの App\Providers\FortifyServiceProvider クラスの boot メソッド内でこのメソッドを呼び出します。

use Laravel\Fortify\Fortify;

/**
 * アプリケーションサービスの初期化。
 */
public function boot(): void
{
    Fortify::confirmPasswordView(function () {
        return view('auth.confirm-password');
    });

    // ...
}

Fortify はこのビューを返す /user/confirm-password エンドポイントの定義を行います。
confirm-password テンプレートには、/user/confirm-password エンドポイントに対して POST リクエストを送信するフォームを含めてください。
/user/confirm-password エンドポイントは、ユーザーの現在のパスワードを含む password フィールドを受け取ります。

パスワードがユーザーの現在のパスワードと一致した場合、Fortifyはユーザーをアクセスしようとしていたルートにリダイレクトします。XHRリクエストの場合は、201 HTTPレスポンスが返されます。

リクエストが成功しなかった場合、ユーザーはパスワード確認画面にリダイレクトされ、バリデーションエラーは共有された $errors のBladeテンプレート変数で利用できます。XHRリクエストの場合は、バリデーションエラーが422 HTTPレスポンスと共に返されます。