重置密码
介绍
想快速开始吗? 安装 laravel/ui
Composer 包并在一个新的 Laravel 应用中运行 php artisan ui vue --auth
。在迁移数据库后,导航到 http://your-app.test/register
或分配给应用的其他 URL。这个命令将为你搭建整个认证系统,包括重置密码!
大多数 Web 应用程序都提供了一种让用户重置忘记密码的方法。Laravel 提供了方便的方法来发送密码提醒和执行密码重置,而不是让你在每个应用程序中重新实现这一功能。
在使用 Laravel 的密码重置功能之前,用户必须使用 Illuminate\Notifications\Notifiable
trait。
数据库注意事项
首先,确认你的 App\User
模型实现了 Illuminate\Contracts\Auth\CanResetPassword
合约。框架中包含的 App\User
模型已经实现了这个接口,并使用 Illuminate\Auth\Passwords\CanResetPassword
trait 来包含实现接口所需的方法。
生成重置令牌表迁移
接下来,必须创建一个表来存储密码重置令牌。这个表的迁移文件已经包含在 Laravel 中,位于 database/migrations
目录中。因此,你只需运行数据库迁移:
php artisan migrate
路由
Laravel 包含 Auth\ForgotPasswordController
和 Auth\ResetPasswordController
类,这些类包含了发送密码重置链接和重置用户密码所需的逻辑。所有执行密码重置所需的路由可以通过 laravel/ui
Composer 包生成:
composer require laravel/ui --dev
php artisan ui vue --auth
视图
要生成重置密码所需的所有视图,可以使用 laravel/ui
Composer 包:
composer require laravel/ui --dev
php artisan ui vue --auth
这些视图位于 resources/views/auth/passwords
。你可以根据应用的需要自由定制它们。
重置密码后
一旦定义了重置用户密码的路由和视图,你可以在浏览器中访问 /password/reset
路由。框架中包含的 ForgotPasswordController
已经包含了发送密码重置链接电子邮件的逻辑,而 ResetPasswordController
包含了重置用户密码的逻辑。
密码重置后,用户将自动登录到应用程序并重定向到 /home
。你可以通过在 ResetPasswordController
中定义 redirectTo
属性来自定义密码重置后的重定向位置:
protected $redirectTo = '/dashboard';
默认情况下,密码重置令牌在一小时后过期。你可以通过 config/auth.php
文件中的密码重置 expire
选项更改此设置。
自定义
认证守卫自定义
在 auth.php
配置文件中,你可以配置多个“守卫”,用于为多个用户表定义认证行为。你可以通过重写控制器中的 guard
方法来自定义包含的 ResetPasswordController
以使用你选择的守卫。此方法应返回一个守卫实例:
use Illuminate\Support\Facades\Auth;
/**
* 获取在密码重置期间使用的守卫。
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard('guard-name');
}
密码代理自定义
在 auth.php
配置文件中,你可以配置多个密码“代理”,用于在多个用户表上重置密码。你可以通过重写 broker
方法来自定义包含的 ForgotPasswordController
和 ResetPasswordController
以使用你选择的代理:
use Illuminate\Support\Facades\Password;
/**
* 获取在密码重置期间使用的代理。
*
* @return PasswordBroker
*/
public function broker()
{
return Password::broker('name');
}
重置邮件自定义
你可以轻松修改用于向用户发送密码重置链接的通知类。首先,在 User
模型中重写 sendPasswordResetNotification
方法。在此方法中,你可以使用任何通知类发送通知。密码重置 $token
是方法接收的第一个参数:
/**
* 发送密码重置通知。
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));
}