重置密码
简介
想要快速开始?只需在新的 Laravel 应用上运行
php artisan make:auth
,并将浏览器导航到http://your-app.test/register
或其它分配给应用的 URL 就行了。此命令将搭建好整个认证系统,包括重置密码!
大多数 Web 应用都为用户提供了重置密码的功能。Laravel 不强迫您在每个应用上重新实现该功能,而是提供了便捷的方法来发送密码提醒和完成密码重置。
在使用 Laravel 密码重置功能之前,确保用户模型引入了
Illuminate\Notifications\Notifiable
Trait。
数据库注意事项
首先,确保 App\User
模型实现了 Illuminate\Contracts\Auth\CanResetPassword
Contract。当然,框架包含的 App\User
模型已经实现了该接口,并使用 Illuminate\Auth\Passwords\CanResetPassword
Trait 包含了实现该接口所需的方法。
生成重置令牌的表迁移
接下来,必须创建一张数据表来存储密码重置令牌。Laravel 自带了该表的迁移,并存放在 database/migrations
目录中。因此,只需要运行数据库迁移:
php artisan migrate
路由
Laravel 的 Auth\ForgotPasswordController
和 Auth\ResetPasswordController
类包含了发送密码重置链接邮件和重置用户密码所必需的逻辑。可以使用 Artisan 命令 make:auth
生成密码重置所需的全部路由:
php artisan make:auth
视图
同样,Laravel 会在运行 make: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;
protected function guard()
{
return Auth::guard('guard-name');
}
自定义密码代理商
在 auth.php
配置文件中,可以配置多个密码「代理商」为多个用户表重置密码。可以通过重写 broker
方法自定义 ForgotPasswordController
和 ResetPasswordController
中选择使用的中间人:
use Illuminate\Support\Facades\Password;
/**
* 获取密码重置时使用的代理商
*
* @return PasswordBroker
*/
protected function broker()
{
return Password::broker('name');
}
自定义重置邮件
可以轻松修改用于向用户发送密码重置链接的通知类。首先,重写 User
模型的 sendPasswordResetNotification
方法。在此方法中,可以使用任何选择的通知类来发送通知。密码重置 $token
是该方法接收的第一个参数:
/**
* 发送密码重置通知
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));
}