重置密码
大多数 Web 应用都为用户提供了重置密码的功能。相比强迫你在每个应用中都要重实现一遍此功能,Laravel 提供了便捷的方法来发送密码提醒和执行密码重置。
数据库注意事项
首先,请核实你的 App\User
模型是否实现了 Illuminate\Contracts\Auth\CanResetPassword
契约。当然,Laravel 框架中包含的 App\User
模型已经实现了该接口,并使用 Illuminate\Auth\Passwords\CanResetPassword
trait 来包含实现该接口所需的方法。
生成重置令牌的表迁移
接下来,必须创建一个数据表来存储密码重置令牌。该数据表的迁移已包含在 Laravel 应用的 database/migrations
目录中。因此,你需要做的只是运行数据库迁移命令:
Laravel 已在 Auth\ForgotPasswordController
和 Auth\ResetPasswordController
类中包含了发送密码重置链接电子邮件和重置用户密码所需的逻辑。所有执行密码重置所需的路由可以使用 Artisan 命令 make:auth
生成:
php artisan make:auth
视图
当执行 make:auth
命令时,Laravel 会生成重置密码所需的所有视图,这些视图放置在 resources/views/auth/passwords
目录中。你可以根据需要随意修改它们。
一旦你定义了重置用户密码的路由和视图,你可以在浏览器中访问 /password/reset
这个路由来重置密码。框架中的 ForgotPasswordController
已包含发送密码重置链接电子邮件的逻辑,而 则包含重置用户密码的逻辑。
自定义
自定义身份验证看守器
在 auth.php
配置文件中,你可以配置多个「看守器」,这些看守器可以用来定义多个用户表的身份验证行为。你可以通过重写 ResetPasswordController
控制器中的 guard
方法来使用你所选择的看守器。这个方法应该返回一个看守器实例:
use Illuminate\Support\Facades\Auth;
protected function guard()
{
return Auth::guard('guard-name');
}
自定义密码代理
在你的 auth.php
配置文件中,你可以配置多个密码「代理」,用来重置多个用户表上的密码。你可以通过重写 和 ResetPasswordController
控制器的 broker
方法来使用你所选择的代理:
自定义密码重置邮件
你可以轻松修改用于向用户发送密码重置链接的通知类。首先,请重写 User
模型中的 sendPasswordResetNotification
方法。在此方法中,你可以使用你选择的任何通知类来发送通知。该方法接收的第一个参数是密码重置令牌 $token
:
* 发送密码重置通知。
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));