Skip to content

重置密码

介绍

lightbulb

想快速开始吗? 安装 laravel/ui Composer 包并在一个新的 Laravel 应用中运行 php artisan ui vue --auth。在迁移数据库后,导航到 http://your-app.test/register 或分配给应用的任何其他 URL。这个命令将为您搭建整个身份验证系统,包括重置密码!

大多数 Web 应用程序都提供了一种让用户重置忘记密码的方法。Laravel 提供了方便的方法来发送密码提醒和执行密码重置,而不是让您在每个应用程序中重新实现这一点。

exclamation

在使用 Laravel 的密码重置功能之前,您的用户必须使用 Illuminate\Notifications\Notifiable trait。

数据库注意事项

首先,确认您的 App\User 模型实现了 Illuminate\Contracts\Auth\CanResetPassword 合约。框架附带的 App\User 模型已经实现了这个接口,并使用 Illuminate\Auth\Passwords\CanResetPassword trait 来包含实现接口所需的方法。

生成重置令牌表迁移

接下来,必须创建一个表来存储密码重置令牌。此表的迁移包含在 laravel/ui Composer 包中。安装 laravel/ui 包后,您可以使用 migrate 命令来创建密码重置令牌数据库表:

php
composer require laravel/ui

php artisan migrate

路由

Laravel 包含 Auth\ForgotPasswordControllerAuth\ResetPasswordController 类,这些类包含了发送密码重置链接和重置用户密码所需的逻辑。所有执行密码重置所需的路由都可以使用 laravel/ui Composer 包生成:

php
composer require laravel/ui

php artisan ui vue --auth

视图

要生成重置密码所需的所有视图,您可以使用 laravel/ui Composer 包:

php
composer require laravel/ui

php artisan ui vue --auth

这些视图放置在 resources/views/auth/passwords 中。您可以根据需要自由定制它们以适应您的应用程序。

重置密码后

一旦您定义了重置用户密码的路由和视图,您可以在浏览器中访问 /password/reset 路由。框架附带的 ForgotPasswordController 已经包含了发送密码重置链接电子邮件的逻辑,而 ResetPasswordController 包含了重置用户密码的逻辑。

密码重置后,用户将自动登录到应用程序并重定向到 /home。您可以通过在 ResetPasswordController 上定义 redirectTo 属性来自定义密码重置后的重定向位置:

php
protected $redirectTo = '/dashboard';
exclamation

默认情况下,密码重置令牌在一小时后过期。您可以通过 config/auth.php 文件中的密码重置 expire 选项来更改此设置。

自定义

身份验证守卫自定义

在您的 auth.php 配置文件中,您可以配置多个“守卫”,这些守卫可用于为多个用户表定义身份验证行为。您可以通过重写控制器上的 guard 方法来自定义包含的 ResetPasswordController 以使用您选择的守卫。此方法应返回一个守卫实例:

php
use Illuminate\Support\Facades\Auth;

/**
 * 获取在密码重置期间使用的守卫。
 *
 * @return \Illuminate\Contracts\Auth\StatefulGuard
 */
protected function guard()
{
    return Auth::guard('guard-name');
}

密码代理自定义

在您的 auth.php 配置文件中,您可以配置多个密码“代理”,这些代理可用于重置多个用户表上的密码。您可以通过重写 broker 方法来自定义包含的 ForgotPasswordControllerResetPasswordController 以使用您选择的代理:

php
use Illuminate\Support\Facades\Password;

/**
 * 获取在密码重置期间使用的代理。
 *
 * @return PasswordBroker
 */
public function broker()
{
    return Password::broker('name');
}

重置电子邮件自定义

您可以轻松修改用于向用户发送密码重置链接的通知类。要开始,请在您的 User 模型上重写 sendPasswordResetNotification 方法。在此方法中,您可以使用任何通知类发送通知。密码重置 $token 是方法接收到的第一个参数:

php
/**
 * 发送密码重置通知。
 *
 * @param  string  $token
 * @return void
 */
public function sendPasswordResetNotification($token)
{
    $this->notify(new ResetPasswordNotification($token));
}