Lang x Lang

Laravel Fortify

Table of Contents

Introduction

Laravel Fortify は、Laravel のフロントエンドに依存しない authentication のバックエンド実装です。Fortify は、log イン、登録、password reset、mail 認証など、Laravel の全ての認証機能を実装するために必要な routes とコントローラを登録します。Fortify をインストールした後に、route:list Artisan command を実行すれば、Fortify が登録した routes を確認することができます。

Fortify は独自のユーザインターフェースを提供していないため、それを登録する routes への requests を行う独自のユーザインターフェースとペアにすることを意図しています。このドキュメントの残りの部分で、これらの routes への requests の方法について具体的に説明します。

NOTE

覚えておいてください、Fortify は、Laravel の認証機能を実装するためのスタート地点を提供することを目的としたパッケージです。それを使用することは必須ではありません。 authenticationpassword reset、そしてmail 認証のドキュメンテーションが提供している通り、Laravel の認証 services と直接対話する自由が常にあります。

Fortify とは何ですか?

前述の通り、Laravel Fortify は、Laravel のフロントエンドに依存しない authentication のバックエンド実装です。Fortify は、log イン、登録、password reset、mail 確認など、Laravel のすべての authentication 機能を実装するために必要な routes とコントローラーを登録します。

Laravel の authentication features を使用するために必ずしも Fortify を使用する必要はありません。 Laravel の authentication services に対して手動で操作する自由が常にあります。具体的には、authenticationpassword の reset、そしてmail 認証のドキュメンテーションが利用可能です。

もしあなたが Laravel に新しいのなら、Laravel Fortify を使用する前に、まずLaravel Breezeの application スターターキットを探してみることをおすすめします。Laravel Breeze は、あなたの application のためのTailwind CSS で作られた user インターフェースを含む authentication の足場を提供します。Fortify とは異なり、Breeze はその routes とコントローラーを直接あなたの application に公開します。これにより、あなたは Laravel の認証機能を学び、使い慣れることができます。そして、それらの機能を Laravel Fortify が実装することができます。

Laravel Fortify は基本的に、 Laravel Breeze の routes とコントローラーを取り、 user インターフェイスを含まないパッケージとして提供します。これにより、特定のフロントエンドの意見に縛られることなく、アプリケーションの authentication レイヤーのバックエンド実装を素早くスキャフォールドすることができます。

いつ Fortify を使用すべきでしょうか?

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

application スターターキットを使用していない場合、またはあなたの application が authentication features を必要とする場合、 options が 2 つあります:アプリケーションの authentication features を手動で実装するか、 Laravel Fortify を使用してこれらの features のバックエンド実装を提供することです。

Fortify をインストールすることを選んだ場合、あなたの user インターフェースは、このドキュメンテーションで詳しく説明されている Fortify の authentication routes に requests を行い、register users ための authentication を行います。

もし手動で Laravel の authentication services を扱うことを選んで、 Fortify の利用を避けるのであれば、それを行うためのドキュメンテーションは、authenticationpassword reset、およびemail verificationのドキュメンテーションで利用できます。

Laravel Fortify と Laravel Sanctum

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

Laravel Sanctum は、API tokens の管理と、既存の users を sessioncookies または tokens を使用して authentication することだけに関与します。Sanctum は、user の登録、password reset、etc を処理する routes を提供しません。

API を提供する application またはシングルページ application のバックエンドとして機能する application の authentication レイヤーを手動で build しようとしている場合、Laravel Fortify(user の登録、password reset、etc)と Laravel Sanctum(API token 管理、session authentication)の両方を利用する可能性が高いです。

Installation

はじめに、 Composer パッケージマネージャーを使用して Fortify をインストールします:

composer require laravel/fortify

次に、Fortify の resources をfortify:installの Artisan command を使って publish してください:

php artisan fortify:install

この command は Fortify のアクションをあなたのapp/Actionsディレクトリに publish します。それは存在しない場合には作成されます。さらに、FortifyServiceProvider、設定ファイル、およびすべて必要な database migrations が公開されます。

次に、あなたの database を migrate すべきです:

php artisan migrate

Fortify Features

fortify設定ファイルにはfeatures設定の array が含まれています。この array は、Fortify が default で公開するバックエンド routes/features を定義します。Laravel Jetstream と組み合わせて Fortify を使用していない場合は、ほとんどの Laravel アプリケーションで提供されている基本的な authentication features のみを有効にすることをお勧めします:

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

Views の無効化

default で、Fortify は log イン画面や登録画面など、view を返すことを目的とした route を定義します。ただし、JavaScript を用いたシングルページ application を作成している場合、これらの route は必要ないかもしれません。そのため、application のconfig/fortify.php設定ファイル内のviews設定 value をfalseに設定することで、これらの route を完全に無効にすることができます。

'views' => false,

Views と Password Reset の無効化

Fortify の views を無効にすることを選択し、application に password reset 機能を実装する場合でも、アプリケーションの password reset の view を表示する責任を持つpassword.resetという名前の route を定義すべきです。これは必要なことであり、なぜなら Laravel のIlluminate\Auth\Notifications\ResetPassword 通知が、password.resetという名前の route を経由して password resetURL を生成するからです。

Authentication

始めるには、私たちの"login"の view を返す方法を" Fortify "に指示する必要があります。覚えておいてください、" Fortify "はヘッドレスの authentication library です。もし、あなたがすでに完成している Laravel の authentication features のフロントエンド実装を希望するなら、application starter kitを使うべきです。

すべての authentication ビューの rendering ロジックは、Laravel\Fortify\Fortify class 経由で利用可能な適切なメソッドを使用してカスタマイズできます。通常、この method はあなたの application の App\Providers\FortifyServiceProvider class の boot method から呼び出すべきです。 Fortify は、この view を返す /login route の定義を行います。

use Laravel\Fortify\Fortify;

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

    // ...
}

あなたのログインテンプレートには、/loginへの POST request を行うフォームを含める必要があります。/loginエンドポイントは、 email / username が string であること、そして passwordを要求します。 email / username フィールドの名前は、config/fortify.php設定ファイル内のusername value と match しているべきです。さらに、 boolean rememberフィールドは、 user が"remeber me"機能を使用したい場合に提供できます。これは、 Laravel が提供しているものです。

ログイン attempt が成功すると、Fortify はアプリケーションの fortify 設定ファイル内の home 設定オプションで構成された URI に redirect します。ログイン request が XHR request だった場合、200HTTP response が返されます。

request が成功しなかった場合、 user はログイン画面にリダイレクトされ、 validation errors は共有された$errorsBlade テンプレート変数を通じてあなたに提供されます。また、XHR request の場合、 validation errors は 422 HTTP response と共に返されます。

User Authentication のカスタマイズ

Fortify は提供された認証情報と、あなたの application に対して設定された authentication ガードに基づいて、自動的に user を取得し認証します。しかし、ログイン認証情報がどのように認証され、 users がどのように retrieved されるかについて、完全なカスタマイズを行いたいこともあるかもしれません。ありがたいことに、 Fortify ではFortify::authenticateUsing method を使用してこれを簡単に達成できます。

この method は、入力の HTTP request を受け取るクロージャを受け入れます。クロージャは、 request に添付されているログイン資格情報を validating し、それに関連付けられた user インスタンスを返す責任があります。資格証明が invalid であるか、または user が見つからない場合、クロージャによってnullまたはfalseが返されるべきです。一般的に、この method は、あなたのFortifyServiceProviderboot method から呼び出されるべきです:

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;
        }
    });

    // ...
}

Authentication ガード

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

Authentication Pipeline のカスタマイズ

Laravel Fortify は、呼び出し可能なクラスの pipeline を通じて log イン request を authentication します。ご希望であれば、log イン request が通過すべきクラスの custom パイプラインを定義することもできます。それぞれの class は、__invoke method を持たなければならず、これは入力された Illuminate\Http\Request インスタンスと、middlewareのように、次の request をパイプラインの次のクラスに渡すために呼び出される$nextvariable を受け取ります。

Fortify::authenticateThrough method を使用して、あなたの custompipeline を定義することができます。このメソッドは、log イン request をパイプする class の array を返すべきクロージャを受け入れます。通常、このメソッドは、あなたの App\Providers\FortifyServiceProvider class の boot メソッドから呼び出されるべきです。

以下の例には、あなた自身の変更を開始する起点として使用できる default pipeline の定義が含まれています:

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,
    ]);
});

Authentication スロットリング

default では、Fortify はEnsureLoginIsNotThrottled middleware を使用して authentication の試行をスロットルします。この middleware は、user 名と IP アドレスの組み合わせが unique な試行をスロットルします。

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

NOTE

スロットリング、二要素 authentication、外部の webapplication ファイアウォール(WAF)を組み合わせて利用することで、正規の applicationuser のための最も強固な防御を提供できます。

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

ログインの attempt が成功した場合、 Fortify はあなたを、アプリケーションのfortify設定ファイル内のhome設定オプション経由で設定された URI に redirect します。ログインの request が XHR の request だった場合、200 の HTTP response が返されます。 user が application からログアウトした後、 user は/ URI にリダイレクトされます。

この振る舞いを高度にカスタマイズする必要がある場合は、LoginResponse および LogoutResponse contracts の実装を Laravel のservice containerにバインドすることができます。通常、これはアプリケーションの App\Providers\FortifyServiceProvider class のregister method 内で行うべきです:

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('/');
        }
    });
}

Two Factor Authentication

Fortify の二要素 authentication feature が有効になっているとき、 user は authentication process 中に 6 桁の数字の token を input する必要が required 。この token は、時間ベースの一回限りの password (TOTP)を使用して生成され、Google Authenticator などの TOTP 対応モバイル authentication application から retrieved することができます。

始める前に、あなたのアプリケーションのApp\Models\User model が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;
}

次に、あなたの application の中に users が 2 要素 authentication の設定を管理できる画面を build する必要があります。この画面では、 user が 2 要素 authentication を有効にしたり無効にしたり、そして 2 要素 authentication の回復コードを再生成することを可能にするべきです。

default では、fortify設定ファイルのfeatures array は、変更前に password の確認を要求する Fortify の二要素 authentication 設定を指示します。したがって、application は続行する前に Fortify のpassword confirmation feature を実装する必要があります。

二要素 Authentication の有効化

二要素 authentication を有効にするために、あなたの application は、 Fortify によって定義された/user/two-factor-authenticationエンドポイントに対して POST request を行うべきです。もし request が成功すれば、 user は前の URL に redirect され、status session variable はtwo-factor-authentication-enabledに設定されます。適切な成功メッセージを表示するために、このstatus session variable をテンプレート内で検出することができます。もし request が XHR request であれば、200 HTTP response が返されます。

二要素 authentication を有効にする選択をした後、 user は依然として有効な二要素 authentication code を提供することで二要素 authentication の設定を"confirm"する必要があります。ですから、あなたの"success"メッセージは、二要素 authentication の確認がまだ required であることを user に指示するべきです。

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

次に、 user が自分の認証 application にスキャンできるように、2 要素 authentication の QR code を表示する必要があります。 Blade を使ってアプリケーションのフロントエンドを render している場合は、 user インスタンスで利用可能なtwoFactorQrCodeSvg method を使って QR code の SVG を取得することができます。

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

あなたが JavaScript を駆使したフロントエンドを構築しているなら、/user/two-factor-qr-codeエンドポイントに対して XHR GET request を行い、ユーザーの二要素 authentication QR code を取得することができます。このエンドポイントは、svgキーを含む JSON object を返します。

二要素 Authentication の確認

user の二段階 authentication の authenticationQRcode を表示するだけでなく、テキスト input フィールドを提供して、user が有効な authentication code を提供し、二段階 authentication 設定を"確認"できるようにする必要があります。この code は、Laravel application に、 Fortify が定義した/user/confirmed-two-factor-authenticationエンドポイントへの POSTrequest で提供する必要があります。

もし request が成功した場合、 user は前の URL に redirect され、status session variable は 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

もし二要素 authentication の確認エンドポイントへの request が XHR request で作られた場合、200の HTTP response が返されます。

リカバリーコードの表示

あなたはまた、ユーザーの 2 ファクターリカバリコードを表示するべきです。これらのリカバリコードは、ユーザーがモバイルデバイスへのアクセスを失った場合に user が認証するためのものです。 Blade を使ってアプリケーションのフロントエンドを render している場合は、認証済みの user インスタンス経由でリカバリーコードにアクセスすることができます。

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

あなたが JavaScript で動作するフロントエンドを構築している場合、/user/two-factor-recovery-codesエンドポイントに XHR GET request を行うことができます。このエンドポイントは、ユーザーのリカバリーコードを含む JSON array を返します。

ユーザーのリカバリーコードを再生成するには、あなたの application は、/user/two-factor-recovery-codesエンドポイントに POST request を行うべきです。

二要素 Authentication で Authentication する

authenticationprocess の間、 Fortify は自動的に user を application の二要素 authentication チャレンジ画面に redirect します。しかし、あなたの application が XHRlog イン request を行っている場合、成功した authentication 試行の後に返される JSON response にはtwo_factor ブールプロパティを持つ JSONobject が含まれます。この value を検査して、あなたの application の二要素 authentication チャレンジ画面に redirect するべきかどうかを知るべきです。

2 要素 authentication 機能を実装するためには、Fortify にどのように 2 要素 authentication チャレンジ view を返すかを指示する必要があります。Fortify のすべての認証ビュー描画ロジックは、Laravel\Fortify\Fortify class 経由で利用可能な適切なメソッドを使用してカスタマイズできます。通常は、application の App\Providers\FortifyServiceProvider class の boot method から、この method を呼び出す必要があります。

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::twoFactorChallengeView(function () {
        return view('auth.two-factor-challenge');
    });

    // ...
}

Fortify は、この view を返す/two-factor-challengeという route の定義を担当します。あなたのtwo-factor-challengeテンプレートには、/two-factor-challengeエンドポイントに POST request を行うフォームが含まれているべきです。/two-factor-challengeの action は、有効な TOTP token を含むcodeフィールドまたはユーザーの復旧コードの 1 つを含むrecovery_codeフィールドを期待しています。

ログインの attempt が成功すると、 Fortify は、アプリケーションのfortify設定ファイル内のhome設定オプションを介して設定された URI に user を redirect します。ログインの request が XHR の request だった場合、204 の HTTP response が返されます。

もし request が成功しなかった場合、 user は二段階認証の画面にリダイレクトされ、 validation errors は共有の$errors Blade テンプレート変数を通じてあなたに利用可能となります。また、XHR の request の場合、 validation errors は 422 の HTTP response と共に返されます。

二要素 Authentication の無効化

二要素認証の authentication を無効にするには、ご利用の application が/user/two-factor-authenticationエンドポイントに対して DELETE request を実行する必要があります。Fortify の二要素認証の authentication エンドポイントは、呼び出される前にpassword の確認が必要であることを覚えておいてください。

Registration

私たちのアプリケーションの登録機能を実装するためには、まず" Fortify "に対して、"register" " view "をどのように返すかを指示する必要があります。覚えておいてください、" Fortify "はヘッドレスな" authentication library "です。もし、すでに完成している Laravel の" authentication features "のフロントエンド実装がほしいと思ったら、application スターターキットを使用すべきです。

Fortify の view レンダリングロジックは、 Laravel\Fortify\Fortify class 経由で利用可能な適切なメソッドを使用してカスタマイズすることができます。通常、この method は、あなたの App\Providers\FortifyServiceProvider class の boot method から呼び出すべきです:

use Laravel\Fortify\Fortify;

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

    // ...
}

Fortify は、この view を返す/registerという route を定義する作業を担当します。あなたのregisterテンプレートには、 Fortify によって定義された/registerエンドポイントに POST request を送るフォームが含まれているべきです。

/registerエンドポイントは、string name、string email アドレス / username、password、およびpassword_confirmationフィールドを期待しています。email / username フィールドの名前は、アプリケーションのfortify設定ファイル内で定義されたusername設定の value と match する必要があります。

登録 attempt が成功した場合、 Fortify は home 設定オプションを通じて設定された URI に user を redirect します。これはあなたのアプリケーションの fortify 構成ファイル内で設定します。もし request が XHR request だった場合、201 の HTTP response が返されます。

request が成功しなかった場合、user は登録画面に redirect され、共有の$errors Blade テンプレート variables経由で validationerrors が利用可能になります。また、XHRrequest の場合、validationerrors は 422HTTP response として返されます。

登録のカスタマイズ

user authentication や process のカスタマイズは、App\Actions\Fortify\CreateNewUser user validation の修正によって可能になります。この action は、 Laravel Fortify をインストールした際に生成されました。

Password Reset

Password Reset リンクのリクエスト

私たちのアプリケーションの password reset 機能を実装し始めるためには、 Fortify にどのように forgot password の view を返すよう指示する必要があります。なお、 Fortify はヘッドレスの authentication library です。 Laravel のすでに完成している authentication features のフロントエンド実装が欲しい場合は、 application スターターキットを使用するべきです。

すべての Fortify の view rendering ロジックは、Laravel\Fortify\Fortify class 経由で利用可能な適切なメソッドを使用してカスタマイズできます。通常、この method は、application の App\Providers\FortifyServiceProvider class の boot method から呼び出すべきです:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::requestPasswordResetLinkView(function () {
        return view('auth.forgot-password');
    });

    // ...
}

Fortify は、この view を返す/forgot-passwordエンドポイントの定義を行います。あなたのforgot-passwordテンプレートには、/forgot-passwordエンドポイントへの POST request を作成するフォームを含めるべきです。

/forgot-passwordエンドポイントは、emailフィールドに対して string を期待しています。このフィールド/databasecolumn の名前は、application のfortify設定ファイル内のemail設定の value と一致するべきです。

Password Reset リンクの Request Response の処理

password resetlink の request が成功した場合、Fortify は user を/forgot-passwordエンドポイントに redirect し、安全な link を含む email を user に送信します。これを使って user は自分の password を reset できます。もし request が XHRrequest だった場合、200 の HTTP response が返されます。

/forgot-passwordエンドポイントに成功した request の後でリダイレクトされた後、status session 変数は、 password reset リンクの status と request attempt を表示するために使用することができます。

$statusの session 変数の value は、アプリケーションのpasswords言語ファイルで定義された翻訳文字列のいずれかと match します。この value をカスタマイズしたい、そしてまだ Laravel の言語ファイルを公開していない場合は、lang:publishの Artisan command を使ってそれを行うことができます。

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

もし request が成功しなかった場合、 user は request password reset リンク画面にリダイレクトされ、 validation errors は共有された$errors Blade テンプレート変数を介してあなたに提供されます。または、XHR request の場合、 validation errors は 422 の HTTP response とともに返されます。

Password のリセット

私たちのアプリケーションの password reset 機能の実装を完了するには、"reset password"の view を返す方法を Fortify に指示する必要があります。

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

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 はこの view を表示するための route の定義を行います。あなたの reset-password テンプレートには、/reset-passwordに POST request を行うフォームを含めるべきです。

/reset-passwordエンドポイントはemailフィールド、passwordフィールド、password_confirmationフィールド、そしてrequest()->route('token')の value を含むtokenという名前の hidden フィールドを予期しています。"mail"フィールド / database 列の名前は、application のfortify設定ファイル内で定義されたemail設定の value と一致すべきです。

Password Reset Response の処理

password reset の request が成功した場合、Fortify は redirect して/loginroute に戻り、user が新しい password で log インできるようになります。また、log イン画面で reset の成功した status を表示できるように、statussession variable が設定されます。

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

もし request が XHR の request であった場合、200 の HTTP response が返されます。

もし request が成功しなかった場合、 user は reset password 画面にリダイレクトされ、 validation errors は共有$errorsBlade テンプレート変数を通じてあなたに利用可能となります。また、XHR の request の場合、 validation errors は 422 の HTTP response とともに返されます。

Password のリセットをカスタマイズする

password reset process はApp\Actions\ResetUserPassword action を変更することでカスタマイズできます。このアクションは Laravel Fortify をインストールした時に生成されました。

Email Verification

登録後、 users が application にアクセスし続ける前に、 email アドレスを確認することを希望するかもしれません。始めるために、あなたの fortify 設定ファイルの features array で emailVerification feature が有効になっていることを確認してください。次に、あなたの App\Models\User class が Illuminate\Contracts\Auth\MustVerifyEmail インターフェースを実装していることを確認するべきです。

これらのセットアップ手順が 2 つ完了すると、新規に登録された users は、 email アドレスの所有を確認するように促す email を受け取ります。しかし、 user に email 内の検証リンクをクリックする必要があることを通知する email verification 画面をどのように表示するか、 Fortify に知らせる必要があります。

Fortify の全ての view の rendering ロジックは、Laravel\Fortify\Fortify class で利用可能な適切なメソッドを使用してカスタマイズできます。通常、この method は、application のApp\Providers\FortifyServiceProvider class のboot method から呼び出すべきです。

use Laravel\Fortify\Fortify;

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

    // ...
}

Fortify は、verifiedの middleware として Laravel のビルトインが/email/verifyエンドポイントへ redirect されたときに、この view を表示する route を定義する責任を持ちます。

あなたの verify-email テンプレートは、 user に対して、 email アドレスに送信された email verification リンクをクリックするように指示する情報メッセージを含めるべきです。

ご希望であれば、verify-emailテンプレートに button を追加して、/email/verification-notificationエンドポイントに POST request をトリガーするようにすることも可能です。このエンドポイントが request を受け取ると、新しい検証 email link が user にメールで送信されます。これにより、前の link が誤って削除されたり紛失したりした場合でも、 user は新しい検証 link を取得することができます。

再送信の確認 link の requestemail が成功した場合、Fortify は user を/email/verifyエンドポイントに redirect し、statussessionvariables を提供し、操作が成功したことを user に情報メッセージを表示できるようにします。もし request が XHR の request であった場合、202 の HTTP response を返します。

@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

Protecting Routes

user が自分の email アドレスを確認したことが必要な route または routes グループを指定するためには、 Laravel の組み込みのverified middleware を route に attach するべきです。verified middlewarealias は Laravel によって自動的に登録され、Illuminate\Routing\Middleware\ValidateSignature middleware の alias として機能します:

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

Password Confirmation

application を構築している間、時折、その action が実行される前に、 user が自身の password を確認する必要があるアクションが存在するかもしれません。通常、これらの routes は Laravel の組み込み password.confirm middleware によって保護されています。

password 確認機能を実装するにはまず、Fortify に application の password confirmation view をどのように返すべきなのかを指示する必要があります。Fortify は authentication library であり、フロントエンドの実装は含まれていません。すでに完成している Laravel の authentication features のフロントエンド実装が必要な場合は、application starter kitを使用するとよいでしょう。

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

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::confirmPasswordView(function () {
        return view('auth.confirm-password');
    });

    // ...
}

Fortify は、この view を返す/user/confirm-passwordエンドポイントの定義を行います。 confirm-passwordテンプレートには、/user/confirm-passwordエンドポイントに POST request を行うフォームが含まれている必要があります。 /user/confirm-passwordエンドポイントは、ユーザーの現在の password を含むpasswordフィールドを期待します。

password がユーザーの現在の password と一致する場合、 Fortify は user をアクセスしようとしていた route に redirect します。もし request が XHR の request であった場合、201 の HTTP response が返されます。

request が成功しなかった場合、 user は password の確認画面にリダイレクトされ、共有$errors Blade テンプレート変数を通じて validation errors があなたに利用可能になります。また、XHR request の場合は、 validation errors が 422 HTTP response で返されます。

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use