コンテンツにスキップ

Laravel Fortify

はじめに

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

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

lightbulb

Fortifyは、Laravelの認証機能の実装をすぐに開始できるようにするためのパッケージであることに注意してください。 **Fortifyを使用する必要はありません。** 認証パスワードリセットメール認証 のドキュメントに記載されている手順に従って、Laravelの認証サービスを手動で操作することもできます。

Fortifyとは?

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

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

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

Laravel Fortifyは、Laravel Breezeのルートとコントローラーを取得し、ユーザーインターフェースを含まないパッケージとして提供します。 これにより、特定のフロントエンドの意見に縛られることなく、アプリケーションの認証レイヤーのバックエンド実装を迅速に構築できます。

Fortifyはいつ使うべきか?

Laravel Fortifyをいつ使用するのが適切か疑問に思うかもしれません。 まず、Laravelのアプリケーションスターターキットのいずれかを使用している場合は、Laravelのすべてのアプリケーションスターターキットがすでに完全な認証実装を提供しているため、Laravel Fortifyをインストールする必要はありません。

アプリケーションスターターキットを使用しておらず、アプリケーションに認証機能が必要な場合は、2つのオプションがあります。アプリケーションの認証機能を手動で実装するか、Laravel Fortifyを使用してこれらの機能のバックエンド実装を提供します。

Fortifyをインストールすることを選択した場合、ユーザーインターフェースは、このドキュメントで詳述されているFortifyの認証ルートにリクエストを行い、ユーザーを認証および登録します。

Fortifyを使用する代わりに、Laravelの認証サービスを手動で操作することを選択した場合は、認証パスワードリセットメール認証 のドキュメントに記載されている手順に従って操作できます。

Laravel FortifyとLaravel Sanctum

Laravel Sanctum とLaravel Fortifyの違いについて混乱する開発者がいます。 2つのパッケージは、2つの異なるが関連する問題を解決するため、Laravel FortifyとLaravel Sanctumは相互に排他的または競合するパッケージではありません。

Laravel Sanctumは、APIトークンの管理と、セッションCookieまたはトークンを使用した既存のユーザーの認証のみを扱います。 Sanctumは、ユーザー登録、パスワードリセットなどを処理するルートを提供しません。

APIを提供するアプリケーションまたはシングルページアプリケーションのバックエンドとして機能するアプリケーションの認証レイヤーを手動で構築しようとしている場合、Laravel Fortify(ユーザー登録、パスワードリセットなど)とLaravel Sanctum(APIトークン管理、セッション認証)の両方を利用する可能性が十分にあります。

インストール

開始するには、Composerパッケージマネージャーを使用してFortifyをインストールします。

composer require laravel/fortify

次に、`fortify:install` Artisanコマンドを使用してFortifyのリソースを公開します。

php artisan fortify:install

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

次に、データベースをマイグレートする必要があります。

php artisan migrate

Fortifyの機能

`fortify`設定ファイルには、`features`設定配列が含まれています。 この配列は、Fortifyがデフォルトで公開するバックエンドルート/機能を定義します。 Laravel Jetstream と組み合わせてFortifyを使用していない場合は、ほとんどの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 を予期します。メール / ユーザー名フィールドの名前は、config/fortify.php 設定ファイル内の username 値と一致する必要があります。さらに、ブール値の remember フィールドを提供して、ユーザーが Laravel によって提供される「記憶する」機能を使用したいことを示すことができます。

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

リクエストが成功しなかった場合、ユーザーはログイン画面にリダイレクトされ、検証エラーは共有 $errors Blade テンプレート変数 を介して利用できます。または、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 Sanctum と組み合わせて Laravel のデフォルトの web ガードを使用する必要があります。

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

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

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

以下の例には、独自の変更を行う際の開始点として使用できるデフォルトのパイプライン定義が含まれています。

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

認証スロットリング

デフォルトでは、Fortify は EnsureLoginIsNotThrottled ミドルウェアを使用して認証試行をスロットルします。このミドルウェアは、ユーザー名と IP アドレスの組み合わせに固有の試行をスロットルします。

一部のアプリケーションでは、IP アドレスのみによるスロットリングなど、認証試行のスロットリングに異なるアプローチが必要になる場合があります。そのため、Fortify では、fortify.limiters.login 設定オプションを介して独自の レートリミッター を指定できます。もちろん、この設定オプションはアプリケーションの config/fortify.php 設定ファイルにあります。

lightbulb

スロットリング、二要素認証、および外部 Web アプリケーションファイアウォール (WAF) を組み合わせることで、正当なアプリケーションユーザーに対して最も堅牢な防御が提供されます。

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

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

この動作の高度なカスタマイズが必要な場合は、LoginResponse および LogoutResponse コントラクトの実装を Laravel サービスコンテナ にバインドできます。通常、これはアプリケーションの App\Providers\FortifyServiceProvider クラスの register メソッド内で行う必要があります。

use Laravel\Fortify\Contracts\LogoutResponse;
 
/**
* Register any application services.
*/
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;
}

次に、ユーザーが二要素認証設定を管理できる画面をアプリケーション内に構築する必要があります。この画面では、ユーザーは二要素認証を有効および無効にしたり、二要素認証リカバリーコードを再生成したりできます。

デフォルトでは、fortify 設定ファイルの features 配列は、Fortify の二要素認証設定で変更前にパスワードの確認を要求するように指示します。したがって、アプリケーションは続行する前に Fortify の パスワード確認 機能を実装する必要があります。

二要素認証の有効化

二要素認証の有効化を開始するには、アプリケーションは Fortify によって定義された /user/two-factor-authentication エンドポイントに POST リクエストを行う必要があります。リクエストが成功した場合、ユーザーは前の URL にリダイレクトされ、status セッション変数が two-factor-authentication-enabled に設定されます。テンプレート内でこの status セッション変数を検出して、適切な成功メッセージを表示できます。リクエストが XHR リクエストだった場合、200 HTTP レスポンスが返されます。

二要素認証を有効にすることを選択した後、ユーザーはまだ有効な二要素認証コードを提供することによって二要素認証設定を「確認」する必要があります。そのため、「成功」メッセージには、二要素認証の確認がまだ必要であることをユーザーに指示する必要があります。

@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 リクエストを介して Laravel アプリケーションに提供する必要があります。

リクエストが成功した場合、ユーザーは前の 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 ブール値プロパティを持つ JSON オブジェクトが含まれます。アプリケーションの二要素認証チャレンジ画面にリダイレクトする必要があるかどうかを知るために、この値を検査する必要があります。

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

use Laravel\Fortify\Fortify;
 
/**
* Bootstrap any application services.
*/
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 フィールド、またはユーザーのリカバリーコードのいずれかを含む recovery_code フィールドを予期します。

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

リクエストが成功しなかった場合、ユーザーは二要素チャレンジ画面にリダイレクトされ、検証エラーは共有 $errors Blade テンプレート変数 を介して利用できます。または、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;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::registerView(function () {
return view('auth.register');
});
 
// ...
}

Fortifyは、このビューを返す/registerルートの定義を処理します。registerテンプレートには、Fortifyによって定義された/registerエンドポイントへのPOSTリクエストを行うフォームを含める必要があります。

/registerエンドポイントは、文字列name、文字列のメールアドレス/ユーザー名、password、およびpassword_confirmationフィールドを予期します。メール/ユーザー名フィールドの名前は、アプリケーションのfortify設定ファイル内で定義されているusername設定値と一致する必要があります。

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

リクエストが成功しなかった場合、ユーザーは登録画面にリダイレクトされ、検証エラーは共有$errors Bladeテンプレート変数を介して利用できます。または、XHRリクエストの場合、検証エラーは422 HTTPレスポンスとともに返されます。

登録のカスタマイズ

ユーザーの検証と作成プロセスは、Laravel Fortifyをインストールしたときに生成されたApp\Actions\Fortify\CreateNewUserアクションを変更することでカスタマイズできます。

パスワードリセット

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

Fortifyのすべてのビューレンダリングロジックは、Laravel\Fortify\Fortifyクラスで利用可能な適切なメソッドを使用してカスタマイズできます。通常、このメソッドはアプリケーションのApp\Providers\FortifyServiceProviderクラスのbootメソッドから呼び出す必要があります。

use Laravel\Fortify\Fortify;
 
/**
* Bootstrap any application services.
*/
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

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

パスワードのリセット

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

Fortifyのすべてのビューレンダリングロジックは、Laravel\Fortify\Fortifyクラスで利用可能な適切なメソッドを使用してカスタマイズできます。通常、このメソッドはアプリケーションのApp\Providers\FortifyServiceProviderクラスのbootメソッドから呼び出す必要があります。

use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;
 
/**
* Bootstrap any application services.
*/
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レスポンスが返されます。

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

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

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

メール認証

登録後、アプリケーションへのアクセスを続ける前に、ユーザーにメールアドレスを確認してもらいたい場合があります。開始するには、fortify設定ファイルのfeatures配列でemailVerification機能が有効になっていることを確認してください。次に、App\Models\UserクラスがIlluminate\Contracts\Auth\MustVerifyEmailインターフェースを実装していることを確認する必要があります。

これら2つのセットアップ手順が完了すると、新しく登録されたユーザーは、メールアドレスの所有権を確認するように求めるメールを受け取ります。ただし、メールで確認リンクをクリックする必要があることをユーザーに知らせるメール確認画面をFortifyに表示する方法を指示する必要があります。

Fortifyのすべてのビューのレンダリングロジックは、Laravel\Fortify\Fortifyクラスで利用可能な適切なメソッドを使用してカスタマイズできます。通常、このメソッドはアプリケーションのApp\Providers\FortifyServiceProviderクラスの`boot`メソッドから呼び出す必要があります。

use Laravel\Fortify\Fortify;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::verifyEmailView(function () {
return view('auth.verify-email');
});
 
// ...
}

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

`verify-email`テンプレートには、送信されたメールアドレスのメール確認リンクをクリックするようにユーザーに指示する情報メッセージを含める必要があります。

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

確認リンクメールの再送信リクエストが成功した場合、Fortifyは`status`セッション変数を使用してユーザーを`/ email / verify`エンドポイントにリダイレクトし、操作が成功したことをユーザーに知らせる情報メッセージを表示できるようにします。リクエストが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`ミドルウェアをルートに添付する必要があります。 `verified`ミドルウェアエイリアスはLaravelによって自動的に登録され、`Illuminate \ Auth \ Middleware \ EnsureEmailIsVerified`ミドルウェアのエイリアスとして機能します

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

パスワードの確認

アプリケーションの構築中に、アクションを実行する前にユーザーにパスワードの確認を要求する必要があるアクションが時折発生する可能性があります。通常、これらのルートはLaravelの組み込み`password.confirm`ミドルウェアによって保護されています。

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

Fortifyのすべてのビューレンダリングロジックは、Laravel\Fortify\Fortifyクラスで利用可能な適切なメソッドを使用してカスタマイズできます。通常、このメソッドはアプリケーションのApp\Providers\FortifyServiceProviderクラスのbootメソッドから呼び出す必要があります。

use Laravel\Fortify\Fortify;
 
/**
* Bootstrap any application services.
*/
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レスポンスとともに返されます。