Laravel 密码重置

简介

大多数Web应用程序为用户提供了一种重置其忘记密码的方法。Laravel只是提供了发送密码提示和执行密码重置的快捷方法,而不是必须要使用这些功能。


数据库注意事项

首先,请确认App\User模型已实现Illuminate\Contracts\Auth\CanResetPassword接口。框架中的App\User模型已经实现了这个接口,并可以使用Illuminate\Auth\Passwords\CanResetPassword功能,包括实现接口所需的方法。

生成重置token表Migration

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

$ composer require laravel/ui
$ php artisan migrate

路由

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

$ composer require laravel/ui
$ php artisan ui vue --auth

视图

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

$ composer require laravel/ui
$ php artisan ui vue --auth

这些视图位于resources/views/auth/passwords。可以根据需要为应用程序自定义。

重置密码后

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

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

protected $redirectTo = '/dashboard';

自定义

身份验证防护自定义

auth.php配置文件中,可以配置多个“防护”,这些“防护”可用于定义多个用户表的身份验证行为。我们可以通过重写ResetPasswordController控制器的guard方法来自定义包含项从而可以使用我们选择保护措施。此方法应返回一个保护实例:

use Illuminate\Support\Facades\Auth;

/**
 * Get the guard to be used during password reset.
 *
 * @return \Illuminate\Contracts\Auth\StatefulGuard
 */
protected function guard()
{
    return Auth::guard('guard-name');
}

密码代理自定义

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

use Illuminate\Support\Facades\Password;

/**
 * Get the broker to be used during password reset.
 *
 * @return PasswordBroker
 */
public function broker()
{
    return Password::broker('name');
}

重置电子邮件自定义

我们可以轻松地修改用于将密码重置链接发送给用户的通知类。首先,重写模型sendPasswordResetNotification上的User方法。在此方法中,我们可以使用选择的任何通知类发送通知。密码重置$token是该方法接收的第一个参数:

/**
 * Send the password reset notification.
 *
 * @param  string  $token
 * @return void
 */
public function sendPasswordResetNotification($token)
{
    $this->notify(new ResetPasswordNotification($token));
}

查看笔记

扫码一下
查看教程更方便