跳至内容

Laravel Fortify

介绍

Laravel Fortify是 Laravel 的一个与前端无关的身份验证后端实现。Fortify 注册了实现 Laravel 所有身份验证功能所需的路由和控制器,包括登录、注册、密码重置、邮箱验证等等。安装 Fortify 后,您可以运行route:listArtisan 命令来查看 Fortify 已注册的路由。

由于 Fortify 本身不提供用户界面,因此它需要与您自己的用户界面配对,以便向其注册的路由发出请求。我们将在本文档的其余部分详细讨论如何向这些路由发出请求。

请记住,Fortify 是一个软件包,旨在帮助您快速入门并实现 Laravel 的身份验证功能。您并非必须使用它。您可以随时按照身份验证密码重置电子邮件验证文档中的说明,手动与 Laravel 的身份验证服务进行交互。

Fortify 是什么?

如前所述,Laravel Fortify 是 Laravel 的一个与前端无关的身份验证后端实现。Fortify 注册了实现 Laravel 所有身份验证功能所需的路由和控制器,包括登录、注册、密码重置、电子邮件验证等。

您无需使用 Fortify 即可使用 Laravel 的身份验证功能。您可以随时按照身份验证密码重置电子邮件验证文档中的说明,手动与 Laravel 的身份验证服务进行交互

如果您是 Laravel 新手,建议您在尝试使用 Laravel Fortify 之前先了解一下我们的应用程序入门套件。我们的入门套件为您的应用程序提供了一个身份验证脚手架,其中包含一个使用Tailwind CSS构建的用户界面。这可以让您在 Laravel Fortify 为您实现这些功能之前,先学习并熟悉 Laravel 的身份验证功能。

Laravel Fortify 本质上继承了我们应用程序入门套件中的路由和控制器,并将它们以不包含用户界面的包的形式提供。这使您仍然可以快速构建应用程序身份验证层的后端实现,而无需依赖任何特定的前端规范。

何时应使用 Fortify?

您可能想知道何时适合使用 Laravel Fortify。首先,如果您正在使用 Laravel 的应用程序入门套件之一,则无需安装 Laravel Fortify,因为所有 Laravel 的应用程序入门套件都已提供完整的身份验证实现。

如果您没有使用应用程序入门套件,并且您的应用程序需要身份验证功能,则您有两个选择:手动实现应用程序的身份验证功能或使用 Laravel Fortify 提供这些功能的后端实现。

如果您选择安装 Fortify,您的用户界面将向 Fortify 的身份验证路由发出请求,该路由在本文档中详细说明,以便对用户进行身份验证和注册。

如果您选择手动与 Laravel 的身份验证服务进行交互而不是使用 Fortify,您可以按照身份验证密码重置电子邮件验证文档中提供的文档进行操作。

Laravel Fortify 和 Laravel Sanctum

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

Laravel Sanctum 仅负责管理 API 令牌以及使用会话 Cookie 或令牌对现有用户进行身份验证。Sanctum 不提供任何处理用户注册、密码重置等功能的路由。

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

安装

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

1composer require laravel/fortify

接下来使用fortify:installArtisan 命令发布 Fortify 的资源:

1php artisan fortify:install

此命令会将 Fortify 的操作发布到您的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 驱动的单页应用程序,则可能不需要这些路由。因此,您可以通过将views应用程序config/fortify.php配置文件中的配置值设置为以下值来完全禁用这些路由false

1'views' => false,

禁用视图和密码重置

如果您选择禁用 Fortify 的视图,并且打算在应用程序中实现密码重置功能,您仍然应该定义一个名为 的路由password.reset,用于显示应用程序的“重置密码”视图。这是必要的,因为 Laravel 的Illuminate\Auth\Notifications\ResetPassword通知将通过该路由生成密码重置 URL password.reset

验证

首先,我们需要指示 Fortify 如何返回“登录”视图。请记住,Fortify 是一个无头身份验证库。如果您想要一个 Laravel 身份验证功能(这些功能已经为您完成)的前端实现,则可以使用应用程序入门套件

所有身份验证视图的渲染逻辑都可以使用该类中提供的相应方法进行自定义。通常,您应该从应用程序类的方法Laravel\Fortify\Fortify中调用此方法。Fortify 将负责定义返回此视图的路由:bootApp\Providers\FortifyServiceProvider/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}

您的登录模板应该包含一个向 发出 POST 请求的表单/login。该/login端点需要一个字符串email/username和一个password。电子邮件 / 用户名字段的名称应与配置文件username中的值匹配config/fortify.php。此外,remember还可以提供一个布尔值字段,以指示用户是否希望使用 Laravel 提供的“记住我”功能。

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

如果请求不成功,用户将被重定向回登录屏幕,并且验证错误将通过共享的$errors Blade 模板变量提供给您。或者,如果是 XHR 请求,验证错误将与 422 HTTP 响应一起返回。

自定义用户身份验证

Fortify 将根据提供的凭据以及为您的应用程序配置的身份验证保护自动检索和验证用户身份。但是,有时您可能希望完全自定义登录凭据的身份验证和用户检索方式。幸运的是,Fortify 允许您使用该Fortify::authenticateUsing方法轻松实现这一点。

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

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}

身份验证保护

您可以在应用程序的配置文件中自定义 Fortify 使用的身份验证防护fortify。但是,您应该确保配置的防护是 的实现Illuminate\Contracts\Auth\StatefulGuard。如果您尝试使用 Laravel Fortify 对 SPA 进行身份验证,则应将 Laravel 的默认防护与Laravel Sanctumweb结合使用

自定义身份验证Pipeline

Laravel Fortify 通过可调用类组成的Pipeline来验证登录请求。如果您愿意,可以自定义一个类Pipeline,用于处理登录请求。每个类都应该有一个__invoke方法来接收传入的Illuminate\Http\Request实例,并且像中间件一样,$next还有一个变量,用于将请求传递给Pipeline中的下一个类。

要定义自定义Pipeline,您可以使用该Fortify::authenticateThrough方法。此方法接受一个闭包,该闭包应返回用于将登录请求传递到Pipeline的类数组。通常,此方法应从类boot的方法中调用App\Providers\FortifyServiceProvider

下面的示例包含默认Pipeline定义,您可以在进行自己的修改时将其用作起点:

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

身份验证限制

默认情况下,Fortify 将使用EnsureLoginIsNotThrottled中间件限制身份验证尝试。该中间件会限制特定于用户名和 IP 地址组合的身份验证尝试。

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

结合使用限制、双因素身份验证和外部 Web 应用程序防火墙 (WAF) 将为您的合法应用程序用户提供最强大的防御。

自定义重定向

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

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

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}

双因素身份验证

启用 Fortify 的双因素身份验证功能后,用户需要在身份验证过程中输入一个六位数字令牌。此令牌使用基于时间的一次性密码 (TOTP) 生成,可从任何兼容 TOTP 的移动身份验证应用程序(例如 Google Authenticator)中检索。

在开始之前,您应该首先确保您的应用程序App\Models\User模型使用该Laravel\Fortify\TwoFactorAuthenticatable特征:

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}

接下来,您应该在应用程序中构建一个界面,供用户管理其双因素身份验证设置。该界面应允许用户启用和禁用双因素身份验证,以及重新生成双因素身份验证恢复代码。

默认情况下,配置文件features的数组fortify指示 Fortify 的双因素身份验证设置需要在修改前确认密码。因此,您的应用程序应该在继续操作之前实现 Fortify 的密码确认功能。

启用双因素身份验证

要启用双因素身份验证,您的应用程序应向/user/two-factor-authenticationFortify 定义的端点发出 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

twoFactorQrCodeSvg接下来,您应该显示双因素身份验证二维码,以便用户扫描到他们的身份验证器应用程序中。如果您使用 Blade 渲染应用程序的前端,则可以使用用户实例上可用的方法检索二维码 SVG :

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

如果您正在构建一个基于 JavaScript 的前端,您可以向端点发送 XHR GET 请求,/user/two-factor-qr-code以检索用户的双因素身份验证二维码。该端点将返回一个包含svg密钥的 JSON 对象。

确认双因素身份验证

除了显示用户的双因素身份验证二维码外,您还应该提供一个文本输入框,让用户输入有效的身份验证码来“确认”其双因素身份验证配置。此代码应通过 POST 请求提供给 Laravel 应用程序,该请求发送到/user/confirmed-two-factor-authenticationFortify 定义的端点。

如果请求成功,用户将被重定向回之前的 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 的前端,您可以向该端点发出 XHR GET 请求/user/two-factor-recovery-codes。该端点将返回一个包含用户恢复代码的 JSON 数组。

要重新生成用户的恢复代码,您的应用程序应该向/user/two-factor-recovery-codes端点发出 POST 请求。

使用双因素身份验证进行身份验证

在身份验证过程中,Fortify 会自动将用户重定向到应用程序的双因素身份验证质询屏幕。但是,如果您的应用程序正在发出 XHR 登录请求,则身份验证成功后返回的 JSON 响应将包含一个具有布尔two_factor属性的 JSON 对象。您应该检查此值,以确定是否应重定向到应用程序的双因素身份验证质询屏幕。

要开始实现双因素身份验证功能,我们需要指示 Fortify 如何返回双因素身份验证质询视图。Fortify 的所有身份验证视图渲染逻辑都可以使用类中提供的相应方法进行自定义。通常,您应该从应用程序类的方法Laravel\Fortify\Fortify中调用此方法bootApp\Providers\FortifyServiceProvider

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模板应包含一个向端点发出 POST 请求的表单/two-factor-challenge。该/two-factor-challenge操作需要一个code包含有效 TOTP 令牌的字段,或recovery_code一个包含用户恢复代码的字段。

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

$errors 如果请求失败,用户将被重定向回双因素验证界面,并通过Blade 模板共享变量获取验证错误信息。或者,如果是 XHR 请求,验证错误信息将以 422 HTTP 响应的形式返回。

禁用双因素身份验证

要禁用双因素身份验证,您的应用程序应向端点发出 DELETE 请求/user/two-factor-authentication。请记住,Fortify 的双因素身份验证端点在调用之前需要密码确认。

登记

要开始实现应用程序的注册功能,我们需要指示 Fortify 如何返回“注册”视图。请记住,Fortify 是一个无头身份验证库。如果您想要一个已为您完成的 Laravel 身份验证功能的前端实现,则应该使用应用程序入门套件

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

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 定义的端点发出 POST 请求/register

/register端点需要一个字符串name、字符串电子邮件地址/用户名password、和password_confirmation字段。电子邮件/用户名字段的名称应与username应用程序fortify配置文件中定义的配置值匹配。

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

$errors 如果请求不成功,用户将被重定向回注册页面,并通过Blade 模板共享变量获取验证错误信息。或者,如果是 XHR 请求,验证错误将返回 422 HTTP 响应。

自定义注册

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

密码重置

要开始实现应用程序的密码重置功能,我们需要指示 Fortify 如何返回“忘记密码”视图。请记住,Fortify 是一个无头身份验证库。如果您想要一个已为您完成的 Laravel 身份验证功能的前端实现,则应该使用应用程序入门套件

Fortify 的所有视图渲染逻辑都可以使用该类中提供的相应方法进行自定义。通常,您应该从应用程序类的方法Laravel\Fortify\Fortify中调用此方法bootApp\Providers\FortifyServiceProvider

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模板应该包含一个向端点发出 POST 请求的表单/forgot-password

/forgot-password端点需要一个字符串email字段。此字段/数据库列的名称应与email应用程序fortify配置文件中的配置值匹配。

如果密码重置链接请求成功,Fortify 会将用户重定向回/forgot-password端点,并向用户发送一封电子邮件,其中包含一个可用于重置密码的安全链接。如果请求是 XHR 请求,则会返回 200 HTTP 响应。

/forgot-password请求成功后重定向回端点后,status会话变量可用于显示密码重置链接请求尝试的状态。

会话变量的值将与应用程序语言文件$status中定义的翻译字符串之一匹配。如果你想自定义此值,但尚未发布 Laravel 的语言文件,则可以通过Artisan 命令进行操作:passwords lang:publish

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中调用此方法bootApp\Providers\FortifyServiceProvider

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模板应包含一个向 发出 POST 请求的表单/reset-password

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

处理密码重置响应

如果密码重置请求成功,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 响应。

自定义密码重置

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

电子邮件验证

注册后,您可能希望用户在继续访问您的应用之前验证其电子邮件地址。首先,请确保在配置文件的数组emailVerification中启用该功能。接下来,您应该确保您的类实现了该接口。fortifyfeaturesApp\Models\UserIlluminate\Contracts\Auth\MustVerifyEmail

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

Fortify 视图的所有渲染逻辑都可以使用该类中提供的相应方法进行自定义。通常,您应该从应用程序类的方法Laravel\Fortify\Fortify中调用此方法bootApp\Providers\FortifyServiceProvider

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}

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

您的verify-email模板应包含一条信息消息,指导用户单击发送到其电子邮件地址的电子邮件验证链接。

如果您愿意,可以在应用verify-email模板中添加一个按钮,用于触发对端点的 POST 请求/email/verification-notification。当此端点收到请求时,新的验证邮件链接将通过电子邮件发送给用户,以便在用户意外删除或丢失之前的验证链接时,可以获取新的验证链接。

如果重新发送验证链接邮件的请求成功,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中调用此方法bootApp\Providers\FortifyServiceProvider

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模板应该包含一个向端点发出 POST 请求的表单/user/confirm-password。该/user/confirm-password端点需要一个password包含用户当前密码的字段。

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

如果请求失败,用户将被重定向回密码确认页面,并通过 Blade 模板共享变量获取验证错误信息$errors。或者,如果是 XHR 请求,验证错误信息将以 422 HTTP 响应的形式返回。