重置密码

大多数 web 应用都为用户提供了重置密码的功能。相较于强迫你在每个应用中都要重新实现一遍此功能,Laravel 提供了便捷的方法来发送密码提醒以及执行密码重置。

数据库注意事项

首先, 验证你的 App\User 模型是否实现了 Illuminate\Contracts\Auth\CanResetPassword 契约。当然,框架中包含的 App\User 模型已经实现了该接口,并且使用了 Illuminate\Auth\Passwords\CanResetPassword trait t来包含实现该接口所需的方法。

生成重置令牌的表迁移

Laravel 已在 Auth\ForgotPasswordControllerAuth\ResetPasswordController 类中包含了发送密码重置链接电子邮件和重置用户密码的逻辑。所有执行密码重置所需的路由可以使用 Artisan 命令 make:auth 来生成:

  1. php artisan make:auth

视图

当执行 make:auth 命令时,Laravel 会生成重置密码所需的所有视图。 这些视图位于 resources/views/auth/passwords目录中。你可以根据你应用的需要随意修改这些视图。

在重置密码后,用户将会自动登录并重定向到 /home。 你可以通过在ResetPasswordController 中定义一个 redirectTo 属性来自定义密码重置后重定向的位置:

自定义

自定义身份验证看守器

在你的 auth.php 配置文件中,你可以配置多个「看守器」,可以用来定义多个用户表的身份验证行为。你可以自定义框架中的 ResetPasswordController ,通过重写该控制器中的 guard 方法来使用你所选择的看守器。这个方法应当返回一个看守器实例:

  1. use Illuminate\Support\Facades\Auth;
  2. protected function guard()
  3. {
  4. }

自定义密码代理

在你的 auth.php配置文件中,你可以配置多个密码「代理」,可以用来重置多个用户表上的密码。你可以自定义框架中的 和 ResetPasswordController , 通过重写控制器中的 broker 方法来使用你所选择的代理:

自定义密码重置邮件

  1. /**
  2. * 发送密码重置通知。
  3. *
  4. * @param string $token
  5. * @return void
  6. */
  7. public function sendPasswordResetNotification($token)
  8. {
  9. $this->notify(new ResetPasswordNotification($token));

本文章首发在 LearnKu.com 网站上。