Skip to content
赞助商
虚位以待
赞助商
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

重置密码

介绍

NOTE

想快速开始吗? 只需在一个新的 Laravel 应用程序中运行 php artisan make:auth,然后在浏览器中导航到 http://your-app.test/register 或分配给您的应用程序的任何其他 URL。这个单一命令将负责搭建整个身份验证系统,包括重置密码!

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

NOTE

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

数据库注意事项

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

生成重置令牌表迁移

接下来,必须创建一个表来存储密码重置令牌。此表的迁移已包含在 Laravel 中,并位于 database/migrations 目录中。因此,您只需运行数据库迁移:

php
php artisan migrate

路由

Laravel 包含 Auth\ForgotPasswordControllerAuth\ResetPasswordController 类,这些类包含发送密码重置链接和重置用户密码所需的逻辑。可以使用 make:auth Artisan 命令生成执行密码重置所需的所有路由:

php
php artisan make:auth

视图

同样,当执行 make:auth 命令时,Laravel 将生成所有必要的密码重置视图。这些视图放置在 resources/views/auth/passwords 中。您可以根据需要自由定制它们以适应您的应用程序。

重置密码后

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

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

php
protected $redirectTo = '/dashboard';

NOTE

默认情况下,密码重置令牌在一小时后过期。您可以通过 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));
}