跳至内容

Laravel Fortify

简介

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

由于 Fortify 没有提供自己的用户界面,因此它旨在与您自己的用户界面配对,该用户界面向其注册的路由发出请求。我们将在本文档的其余部分讨论如何向这些路由发出请求。

lightbulb

请记住,Fortify 是一个旨在帮助您快速实现 Laravel 身份验证功能的包。**您不需要使用它。**您始终可以按照 身份验证密码重置电子邮件验证 文档中提供的文档手动与 Laravel 的身份验证服务进行交互。

什么是 Fortify?

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

**您不需要使用 Fortify 即可使用 Laravel 的身份验证功能。**您始终可以按照 身份验证密码重置电子邮件验证 文档中提供的文档手动与 Laravel 的身份验证服务进行交互。

如果您不熟悉 Laravel,在尝试使用 Laravel Fortify 之前,您可能希望先探索 Laravel Breeze 应用程序入门套件。Laravel Breeze 为您的应用程序提供了身份验证脚手架,其中包括使用 Tailwind CSS 构建的用户界面。与 Fortify 不同,Breeze 将其路由和控制器直接发布到您的应用程序中。这使您可以在允许 Laravel Fortify 为您实现这些功能之前,学习并熟悉 Laravel 的身份验证功能。

Laravel Fortify 基本上采用了 Laravel Breeze 的路由和控制器,并将其作为一个不包含用户界面的包提供。这使您仍然可以快速构建应用程序身份验证层的后端实现,而无需绑定到任何特定的前端意见。

何时应该使用 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

composer require laravel/fortify

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

php artisan fortify:install

此命令将 Fortify 的操作发布到您的 app/Actions 目录(如果不存在,则会创建该目录)。此外,FortifyServiceProvider、配置文件和所有必要的数据库迁移也将被发布。

接下来,您应该迁移您的数据库

php artisan migrate

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/username和一个password。电子邮件/用户名字段的名称应与config/fortify.php配置文件中的username值匹配。此外,可以提供一个布尔值remember字段以指示用户是否希望使用Laravel提供的“记住我”功能。

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

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

自定义用户身份验证

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

此方法接受一个闭包,该闭包接收传入的HTTP请求。闭包负责验证附加到请求的登录凭据并返回关联的用户实例。如果凭据无效或找不到用户,则闭包应返回nullfalse。通常,此方法应从您的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的实现。如果您尝试使用Laravel Fortify来验证SPA,则应将Laravel的默认web守卫与Laravel Sanctum结合使用。

自定义身份验证管道

Laravel Fortify通过一系列可调用类来验证登录请求。如果需要,您可以定义一个自定义的类管道,登录请求应通过该管道传递。每个类都应该有一个__invoke方法,该方法接收传入的Illuminate\Http\Request实例,并且像中间件一样,还有一个$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。

如果您需要对此行为进行高级自定义,则可以将LoginResponseLogoutResponse契约的实现绑定到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的双因素身份验证功能后,用户需要在身份验证过程中输入一个六位数的数字令牌。此令牌是使用基于时间的一次性密码(TOTP)生成的,可以从任何与TOTP兼容的移动身份验证应用程序(如Google Authenticator)中检索。

在开始之前,您应该首先确保应用程序的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

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

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

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

确认双因素身份验证

除了显示用户的双因素身份验证二维码外,您还应该提供一个文本输入,用户可以在其中提供有效的身份验证代码以“确认”其双因素身份验证配置。此代码应通过向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如何返回我们的“注册”视图。请记住,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,字符串类型的电子邮件地址/用户名,passwordpassword_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 字段,以及一个名为 token 的隐藏字段,其中包含 request()->route('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 接口。

完成这两个设置步骤后,新注册的用户将收到一封电子邮件,提示他们验证其电子邮件地址的所有权。但是,我们需要通知 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 将把用户重定向回 /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 中间件附加到路由。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 响应一起返回。