跳转至内容

Laravel Fortify

简介

Laravel Fortify 是一个针对 Laravel 的无前端(frontend agnostic)认证后端实现。Fortify 注册了实现 Laravel 所有认证功能所需的路由和控制器,包括登录、注册、密码重置、邮箱验证等。安装 Fortify 后,你可以运行 route:list Artisan 命令查看 Fortify 注册的路由。

由于 Fortify 不提供自己的用户界面,它旨在与你自己的用户界面配对使用,由你的界面向其注册的路由发起请求。我们将在本篇文档的后续内容中详细讨论如何向这些路由发起请求。

请记住,Fortify 是一个旨在帮助你快速实现 Laravel 认证功能的软件包。你不是必须使用它。你始终可以按照认证密码重置邮箱验证文档中的说明,手动与 Laravel 的认证服务进行交互。

什么是 Fortify?

如前所述,Laravel Fortify 是一个针对 Laravel 的无前端认证后端实现。Fortify 注册了实现 Laravel 所有认证功能所需的路由和控制器,包括登录、注册、密码重置、邮箱验证等。

为了使用 Laravel 的认证功能,你无需强制使用 Fortify。你始终可以按照认证密码重置邮箱验证文档中的说明,手动与 Laravel 的认证服务进行交互。

如果你是 Laravel 的新手,可能需要探索我们的应用入门套件。Laravel 的应用入门套件在内部使用了 Fortify,为你的应用提供了包含由 Tailwind CSS 构建的用户界面的认证脚手架。这使你可以学习并熟悉 Laravel 的认证功能。

Laravel Fortify 本质上提取了我们应用入门套件中的路由和控制器,并将其作为一个不包含用户界面的软件包提供。这使你依然可以快速构建应用认证层的后端实现,而无需绑定到任何特定的前端方案。

我应该何时使用 Fortify?

你可能想知道何时适合使用 Laravel Fortify。首先,如果你正在使用 Laravel 的应用入门套件,则无需安装 Laravel Fortify,因为所有 Laravel 的应用入门套件都已经使用了 Fortify 并提供了完整的认证实现。

如果你没有使用应用入门套件,且你的应用需要认证功能,你有两个选择:手动实现应用的认证功能,或使用 Laravel Fortify 提供这些功能的后端实现。

如果你选择安装 Fortify,你的用户界面将向本篇文档中详述的 Fortify 认证路由发起请求,以实现用户认证和注册。

如果你选择手动与 Laravel 的认证服务交互而不使用 Fortify,可以参考认证密码重置邮箱验证文档中的说明来完成。

Laravel Fortify 与 Laravel Sanctum

一些开发者对于 Laravel Sanctum 和 Laravel Fortify 之间的区别感到困惑。因为这两个软件包解决了两个不同但相关的问题,Laravel Fortify 和 Laravel Sanctum 并非互斥或竞争关系。

Laravel Sanctum 仅关注管理 API 令牌,并使用会话 cookie 或令牌来认证现有用户。Sanctum 不提供任何处理用户注册、密码重置等功能的路由。

如果你正在尝试为一个提供 API 或作为单页应用后端(SPA)的程序手动构建认证层,你完全有可能同时使用 Laravel Fortify(用于用户注册、密码重置等)和 Laravel Sanctum(用于 API 令牌管理、会话认证)。

安装

首先,使用 Composer 包管理器安装 Fortify

1composer require laravel/fortify

接下来,使用 fortify:install Artisan 命令发布 Fortify 的资源

1php artisan fortify:install

此命令将把 Fortify 的 Action 发布到你的 app/Actions 目录中(如果该目录不存在则会创建)。此外,FortifyServiceProvider、配置文件以及所有必要的数据库迁移文件都将被发布。

接下来,你应该运行数据库迁移

1php artisan migrate

Fortify 功能

fortify 配置文件包含一个 features 配置数组。该数组定义了 Fortify 默认将暴露哪些后端路由/功能。我们建议仅启用以下功能,这些是大多数 Laravel 应用提供的基础认证功能

1'features' => [
2 Features::registration(),
3 Features::resetPasswords(),
4 Features::emailVerification(),
5],

禁用视图

默认情况下,Fortify 会定义用于返回视图的路由,例如登录界面或注册界面。但是,如果你正在构建一个基于 JavaScript 的单页应用(SPA),你可能不需要这些路由。因此,你可以通过将应用 config/fortify.php 配置文件中的 views 配置值设置为 false,来完全禁用这些路由。

1'views' => false,

禁用视图与密码重置

如果你选择禁用 Fortify 的视图,但仍需要为应用实现密码重置功能,则仍需定义一个名为 password.reset 的路由,负责显示应用的“重置密码”视图。这是必要的,因为 Laravel 的 Illuminate\Auth\Notifications\ResetPassword 通知会通过 password.reset 命名路由生成密码重置 URL。

认证

开始之前,我们需要告知 Fortify 如何返回我们的“登录”视图。请记住,Fortify 是一个无头(headless)认证库。如果你想要一个已经为你完成好的 Laravel 认证功能前端实现,你应该使用应用入门套件

所有的认证视图渲染逻辑都可以通过 Laravel\Fortify\Fortify 类提供的相应方法进行自定义。通常,你应该在应用 App\Providers\FortifyServiceProvider 类的 boot 方法中调用此方法。Fortify 将负责定义返回此视图的 /login 路由。

1use Laravel\Fortify\Fortify;
2 
3/**
4 * Bootstrap any application services.
5 */
6public function boot(): void
7{
8 Fortify::loginView(function () {
9 return view('auth.login');
10 });
11 
12 // ...
13}

你的登录模板应包含一个向 /login 发起 POST 请求的表单。/login 端点期望接收字符串格式的 email / usernamepassword。邮箱/用户名 字段的名称应与 config/fortify.php 配置文件中的 username 值匹配。此外,可以提供一个布尔值的 remember 字段,以表明用户希望使用 Laravel 提供的“记住我”功能。

如果登录尝试成功,Fortify 会将你重定向到应用 fortify 配置文件中 home 配置选项设置的 URI。如果登录请求是 XHR 请求,则返回 200 HTTP 响应。

如果请求不成功,用户将被重定向回登录界面,验证错误信息将通过共享的 $errors Blade 模板变量提供给你。或者,在 XHR 请求的情况下,验证错误将随 422 HTTP 响应返回。

自定义用户认证

Fortify 会根据提供的凭据和为你的应用配置的认证 Guard 自动检索并认证用户。但是,有时你可能希望完全自定义如何验证登录凭据以及如何检索用户。值得庆幸的是,Fortify 允许你通过 Fortify::authenticateUsing 方法轻松实现这一点。

此方法接受一个接收传入 HTTP 请求的闭包。该闭包负责验证请求中附带的登录凭据并返回关联的用户实例。如果凭据无效或找不到用户,闭包应返回 nullfalse。通常,此方法应在 FortifyServiceProviderboot 方法中调用。

1use App\Models\User;
2use Illuminate\Http\Request;
3use Illuminate\Support\Facades\Hash;
4use Laravel\Fortify\Fortify;
5 
6/**
7 * Bootstrap any application services.
8 */
9public function boot(): void
10{
11 Fortify::authenticateUsing(function (Request $request) {
12 $user = User::where('email', $request->email)->first();
13 
14 if ($user &&
15 Hash::check($request->password, $user->password)) {
16 return $user;
17 }
18 });
19 
20 // ...
21}

认证 Guard

你可以在应用的 fortify 配置文件中自定义 Fortify 使用的认证 Guard。但是,请确保配置的 Guard 实现了 Illuminate\Contracts\Auth\StatefulGuard。如果你试图使用 Laravel Fortify 来认证 SPA,你应该使用 Laravel 默认的 web Guard 并结合 Laravel Sanctum

自定义认证管道

Laravel Fortify 通过一系列可调用类(invokable classes)的管道来验证登录请求。如果需要,你可以定义一个自定义的类管道,让登录请求依次通过。每个类都应具有一个接收传入 Illuminate\Http\Request 实例的 __invoke 方法,并且像中间件一样,拥有一个 $next 变量,用于将请求传递给管道中的下一个类。

要定义自定义管道,可以使用 Fortify::authenticateThrough 方法。此方法接受一个闭包,该闭包应返回一个包含登录请求所经过类名称的数组。通常,此方法应在应用 App\Providers\FortifyServiceProvider 类的 boot 方法中调用。

下例包含默认的管道定义,你在进行自己的修改时可以将其作为起点。

1use Laravel\Fortify\Actions\AttemptToAuthenticate;
2use Laravel\Fortify\Actions\CanonicalizeUsername;
3use Laravel\Fortify\Actions\EnsureLoginIsNotThrottled;
4use Laravel\Fortify\Actions\PrepareAuthenticatedSession;
5use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;
6use Laravel\Fortify\Features;
7use Laravel\Fortify\Fortify;
8use Illuminate\Http\Request;
9 
10Fortify::authenticateThrough(function (Request $request) {
11 return array_filter([
12 config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
13 config('fortify.lowercase_usernames') ? CanonicalizeUsername::class : null,
14 Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null,
15 AttemptToAuthenticate::class,
16 PrepareAuthenticatedSession::class,
17 ]);
18});

认证频率限制(Throttling)

默认情况下,Fortify 会使用 EnsureLoginIsNotThrottled 中间件对认证尝试进行频率限制。此中间件会对用户名和 IP 地址的唯一组合进行限制。

某些应用可能需要不同的认证尝试限制方法,例如仅按 IP 地址进行限制。因此,Fortify 允许你通过 fortify.limiters.login 配置选项指定自己的频率限制器。当然,此配置选项位于应用的 config/fortify.php 配置文件中。

结合使用频率限制、双重认证以及外部 Web 应用防火墙(WAF),将为你的合法应用用户提供最强大的防御。

自定义重定向

如果登录尝试成功,Fortify 会将你重定向到应用 fortify 配置文件中 home 配置选项设置的 URI。如果登录请求是 XHR 请求,则返回 200 HTTP 响应。用户登出应用后,会被重定向到 / URI。

如果你需要对这种行为进行高级自定义,可以将 LoginResponseLogoutResponse 契约的实现绑定到 Laravel 服务容器中。通常,这应在应用 App\Providers\FortifyServiceProvider 类的 register 方法中完成。

1use Laravel\Fortify\Contracts\LogoutResponse;
2 
3/**
4 * Register any application services.
5 */
6public function register(): void
7{
8 $this->app->instance(LogoutResponse::class, new class implements LogoutResponse {
9 public function toResponse($request)
10 {
11 return redirect('/');
12 }
13 });
14}

双重认证(2FA)

当启用 Fortify 的双重认证功能时,用户需要在认证过程中输入一个六位数字令牌。此令牌是通过基于时间的一次性密码(TOTP)生成的,可以从 Google Authenticator 等任何兼容 TOTP 的移动认证应用中获取。

开始之前,首先要确保应用的 App\Models\User 模型使用了 Laravel\Fortify\TwoFactorAuthenticatable Trait

1<?php
2 
3namespace App\Models;
4 
5use Illuminate\Foundation\Auth\User as Authenticatable;
6use Illuminate\Notifications\Notifiable;
7use Laravel\Fortify\TwoFactorAuthenticatable;
8 
9class User extends Authenticatable
10{
11 use Notifiable, TwoFactorAuthenticatable;
12}

接下来,你应该在应用中构建一个界面,供用户管理其双重认证设置。该界面应允许用户启用和禁用双重认证,以及重新生成双重认证的恢复代码。

默认情况下,fortify 配置文件的 features 数组会将 Fortify 的双重认证设置配置为在修改前要求密码确认。因此,你的应用在继续之前应实现 Fortify 的密码确认功能。

启用双重认证

要开始启用双重认证,你的应用应向 Fortify 定义的 /user/two-factor-authentication 端点发起 POST 请求。如果请求成功,用户将被重定向回之前的 URL,并且 status 会话变量将被设置为 two-factor-authentication-enabled。你可以在模板中检测此 status 会话变量,以显示相应的成功消息。如果请求是 XHR 请求,将返回 200 HTTP 响应。

选择启用双重认证后,用户仍必须通过提供有效的双重认证代码来“确认”其双重认证配置。因此,你的“成功”消息应告知用户仍需进行双重认证确认。

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

接下来,你应该展示双重认证二维码,供用户扫描到他们的认证应用中。如果你使用 Blade 渲染应用前端,可以通过用户实例上提供的 twoFactorQrCodeSvg 方法获取二维码 SVG。

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

如果你正在构建 JavaScript 驱动的前端,可以通过 XHR GET 请求向 /user/two-factor-qr-code 端点发起请求以获取用户的双重认证二维码。该端点将返回一个包含 svg 键的 JSON 对象。

确认双重认证

除了展示用户的双重认证二维码外,你还应提供一个文本输入框,供用户输入有效的认证代码以“确认”其双重认证配置。此代码应通过向 Fortify 定义的 /user/confirmed-two-factor-authentication 端点发起 POST 请求提供给 Laravel 应用。

如果请求成功,用户将被重定向回之前的 URL,并且 status 会话变量将被设置为 two-factor-authentication-confirmed

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

如果通过 XHR 请求向双重认证确认端点发起请求,将返回 200 HTTP 响应。

显示恢复代码

你还应显示用户的双重认证恢复代码。如果用户丢失了对移动设备的访问权限,这些恢复代码允许其进行认证。如果你使用 Blade 渲染应用前端,可以通过已认证的用户实例访问恢复代码。

1(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 方法中调用此方法。

1use Laravel\Fortify\Fortify;
2 
3/**
4 * Bootstrap any application services.
5 */
6public function boot(): void
7{
8 Fortify::twoFactorChallengeView(function () {
9 return view('auth.two-factor-challenge');
10 });
11 
12 // ...
13}

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 如何返回我们的“注册”视图。请记住,Fortify 是一个无头认证库。如果你想要一个已经为你完成好的 Laravel 认证功能前端实现,你应该使用应用入门套件

所有 Fortify 的视图渲染逻辑都可以通过 Laravel\Fortify\Fortify 类提供的相应方法进行自定义。通常,你应该在应用 App\Providers\FortifyServiceProvider 类的 boot 方法中调用此方法。

1use Laravel\Fortify\Fortify;
2 
3/**
4 * Bootstrap any application services.
5 */
6public function boot(): void
7{
8 Fortify::registerView(function () {
9 return view('auth.register');
10 });
11 
12 // ...
13}

Fortify 将负责定义返回此视图的 /register 路由。你的 register 模板应包含一个向 Fortify 定义的 /register 端点发起 POST 请求的表单。

/register 端点期望字符串格式的 name、邮箱地址/用户名、passwordpassword_confirmation 字段。邮箱/用户名 字段的名称应与应用 fortify 配置文件中定义的 username 配置值匹配。

如果注册尝试成功,Fortify 会将用户重定向到应用 fortify 配置文件中 home 配置选项设置的 URI。如果请求是 XHR 请求,将返回 201 HTTP 响应。

如果请求不成功,用户将被重定向回注册界面,验证错误信息将通过共享的 $errors Blade 模板变量提供给你。或者,在 XHR 请求的情况下,验证错误将随 422 HTTP 响应返回。

自定义注册

可以通过修改安装 Laravel Fortify 时生成的 App\Actions\Fortify\CreateNewUser Action 来自定义用户验证和创建过程。

密码重置

要开始实现应用的密码重置功能,我们需要告知 Fortify 如何返回我们的“忘记密码”视图。请记住,Fortify 是一个无头认证库。如果你想要一个已经为你完成好的 Laravel 认证功能前端实现,你应该使用应用入门套件

所有 Fortify 的视图渲染逻辑都可以通过 Laravel\Fortify\Fortify 类提供的相应方法进行自定义。通常,你应该在应用 App\Providers\FortifyServiceProvider 类的 boot 方法中调用此方法。

1use Laravel\Fortify\Fortify;
2 
3/**
4 * Bootstrap any application services.
5 */
6public function boot(): void
7{
8 Fortify::requestPasswordResetLinkView(function () {
9 return view('auth.forgot-password');
10 });
11 
12 // ...
13}

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 命令进行发布。

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

如果请求不成功,用户将被重定向回请求密码重置链接的界面,验证错误信息将通过共享的 $errors Blade 模板变量提供给你。或者,在 XHR 请求的情况下,验证错误将随 422 HTTP 响应返回。

重置密码

要完成应用密码重置功能的实现,我们需要告知 Fortify 如何返回我们的“重置密码”视图。

所有 Fortify 的视图渲染逻辑都可以通过 Laravel\Fortify\Fortify 类提供的相应方法进行自定义。通常,你应该在应用 App\Providers\FortifyServiceProvider 类的 boot 方法中调用此方法。

1use Laravel\Fortify\Fortify;
2use Illuminate\Http\Request;
3 
4/**
5 * Bootstrap any application services.
6 */
7public function boot(): void
8{
9 Fortify::resetPasswordView(function (Request $request) {
10 return view('auth.reset-password', ['request' => $request]);
11 });
12 
13 // ...
14}

Fortify 将负责定义显示此视图的路由。你的 reset-password 模板应包含一个向 /reset-password 发起 POST 请求的表单。

/reset-password 端点期望一个字符串格式的 email 字段、一个 password 字段、一个 password_confirmation 字段,以及一个名为 token 的隐藏字段(其值包含 request()->route('token') 的值)。“email”字段/数据库列的名称应与应用 fortify 配置文件中定义的 email 配置值匹配。

处理密码重置响应

如果密码重置请求成功,Fortify 会重定向回 /login 路由,以便用户可以使用新密码登录。此外,将设置一个 status 会话变量,以便你可以在登录界面显示重置成功的状态。

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

如果请求是 XHR 请求,将返回 200 HTTP 响应。

如果请求不成功,用户将被重定向回重置密码界面,验证错误信息将通过共享的 $errors Blade 模板变量提供给你。或者,在 XHR 请求的情况下,验证错误将随 422 HTTP 响应返回。

自定义密码重置

可以通过修改安装 Laravel Fortify 时生成的 App\Actions\ResetUserPassword Action 来自定义密码重置过程。

邮箱验证

注册后,你可能希望用户在继续访问应用之前验证其邮箱地址。开始之前,请确保 fortify 配置文件 features 数组中启用了 emailVerification 功能。接下来,确保 App\Models\User 类实现了 Illuminate\Contracts\Auth\MustVerifyEmail 接口。

完成这两个设置步骤后,新注册的用户将收到一封电子邮件,提示他们验证其邮箱地址所有权。但是,我们需要告知 Fortify 如何显示邮箱验证界面,告知用户需要去点击邮件中的验证链接。

所有 Fortify 的视图渲染逻辑都可以通过 Laravel\Fortify\Fortify 类提供的相应方法进行自定义。通常,你应该在应用 App\Providers\FortifyServiceProvider 类的 boot 方法中调用此方法。

1use Laravel\Fortify\Fortify;
2 
3/**
4 * Bootstrap any application services.
5 */
6public function boot(): void
7{
8 Fortify::verifyEmailView(function () {
9 return view('auth.verify-email');
10 });
11 
12 // ...
13}

当用户被 Laravel 内置的 verified 中间件重定向到 /email/verify 端点时,Fortify 将负责定义显示此视图的路由。

你的 verify-email 模板应包含一条提示信息,指示用户点击已发送到其邮箱地址的邮件验证链接。

如果需要,可以在应用的 verify-email 模板中添加一个按钮,触发向 /email/verification-notification 端点发起的 POST 请求。当该端点收到请求时,会向用户发送一封新的验证邮件,允许用户在之前链接被意外删除或丢失时获取新链接。

如果重新发送验证邮件的请求成功,Fortify 会将用户重定向回 /email/verify 端点并带有一个 status 会话变量,允许你向用户显示操作成功的提示信息。如果请求是 XHR 请求,将返回 202 HTTP 响应。

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

保护路由

要指定某个路由或路由组要求用户验证其邮箱地址,应将 Laravel 内置的 verified 中间件附加到该路由。verified 中间件别名由 Laravel 自动注册,并作为 Illuminate\Auth\Middleware\EnsureEmailIsVerified 中间件的别名。

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

密码确认

在构建应用时,有时可能需要用户在执行某项操作之前确认其密码。通常,这些路由会由 Laravel 内置的 password.confirm 中间件保护。

要开始实现密码确认功能,我们需要告知 Fortify 如何返回应用的“密码确认”视图。请记住,Fortify 是一个无头认证库。如果你想要一个已经为你完成好的 Laravel 认证功能前端实现,你应该使用应用入门套件

所有 Fortify 的视图渲染逻辑都可以通过 Laravel\Fortify\Fortify 类提供的相应方法进行自定义。通常,你应该在应用 App\Providers\FortifyServiceProvider 类的 boot 方法中调用此方法。

1use Laravel\Fortify\Fortify;
2 
3/**
4 * Bootstrap any application services.
5 */
6public function boot(): void
7{
8 Fortify::confirmPasswordView(function () {
9 return view('auth.confirm-password');
10 });
11 
12 // ...
13}

Fortify 将负责定义返回此视图的 /user/confirm-password 端点。你的 confirm-password 模板应包含一个向 /user/confirm-password 端点发起 POST 请求的表单。/user/confirm-password 端点期望一个包含用户当前密码的 password 字段。

如果密码与用户的当前密码匹配,Fortify 会将用户重定向到其尝试访问的路由。如果请求是 XHR 请求,将返回 201 HTTP 响应。

如果请求不成功,用户将被重定向回确认密码界面,验证错误信息将通过共享的 $errors Blade 模板变量提供给你。或者,在 XHR 请求的情况下,验证错误将随 422 HTTP 响应返回。