* * * * *
[TOC]
## 介绍
> {tip} **想要快速上手?** 只需在一个新的 Laravel 应用中运行 `php artisan make:auth` 命令,然后在浏览器中访问 `http://your-app.dev/register` 或分配给应用的任何别的 URL。这条命令将搭建起整个身份验证系统,包括重置密码!
大多数 Web 应用都为用户提供了重置密码的功能。相比强迫你在每个应用中都要重实现一遍此功能,Laravel 提供了便捷的方法来发送密码提醒和执行密码重置。
> {note} 在使用 Laravel 的密码重置功能之前,你的用户模型必须使用 `Illuminate\Notifications\Notifiable`trait。
## 数据库注意事项
首先,请核实你的 `App\User` 模型是否实现了 `Illuminate\Contracts\Auth\CanResetPassword` 契约。当然,Laravel 框架中包含的 `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
~~~
## 视图
当执行 `make:auth` 命令时,Laravel 会生成重置密码所需的所有视图,这些视图放置在`resources/views/auth/passwords` 目录中。你可以根据需要随意修改它们。
## 重置密码之后
一旦你定义了重置用户密码的路由和视图,你可以在浏览器中访问 `/password/reset` 这个路由来重置密码。框架中的 `ForgotPasswordController` 已包含发送密码重置链接电子邮件的逻辑,而 `ResetPasswordController` 则包含重置用户密码的逻辑。
密码重置之后,用户将自动登录并重定向到 `/home`。 你可以通过在 `ResetPasswordController` 中定义一个 `redirectTo` 属性来自定义密码重置后重定向的位置:
~~~
protected $redirectTo = '/dashboard';
~~~
> {note} 默认情况下,密码重置令牌在一小时后过期。你可以通过 `config/auth.php` 文件中的密码重置 `expire`选项对此进行修改。
## 自定义
#### 自定义身份验证看守器
在 `auth.php` 配置文件中,你可以配置多个「看守器」,这些看守器可以用来定义多个用户表的身份验证行为。你可以通过重写 `ResetPasswordController` 控制器中的 `guard` 方法来使用你所选择的看守器。这个方法应该返回一个看守器实例:
~~~
use Illuminate\Support\Facades\Auth;
protected function guard()
{
return Auth::guard('guard-name');
}
~~~
#### 自定义密码代理
在你的 `auth.php` 配置文件中,你可以配置多个密码「代理」,用来重置多个用户表上的密码。你可以通过重写 `ForgotPasswordController` 和 `ResetPasswordController` 控制器的 `broker` 方法来使用你所选择的代理:
~~~
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));
}
~~~
- 前言
- 翻译说明
- 发行说明
- 升级指南
- 贡献导引
- 入门指南
- 安装
- 配置信息
- 文件夹结构
- Homestead
- Valet
- 部署
- 核心架构
- 请求周期
- 服务容器
- 服务提供者
- Facades
- Contracts
- 基础功能
- 路由
- 中间件
- CSRF 保护
- 控制器
- 请求
- 响应
- 视图
- URL
- Session
- 表单验证
- 错误
- 日志
- 前端开发
- Blade 模板
- 本地化
- 前端指南
- 编辑资源 Mix
- 安全相关
- 用户认证
- Passport OAuth 认证
- 用户授权
- 加密解密
- 哈希
- 重置密码
- 综合话题
- Artisan 命令行
- 广播系统
- 缓存系统
- 集合
- 事件系统
- 文件存储
- 辅助函数
- 邮件发送
- 消息通知
- 扩展包开发
- 队列
- 任务调度
- 数据库
- 快速入门
- 查询构造器
- 分页
- 数据库迁移
- 数据填充
- Redis
- Eloquent ORM
- 快速入门
- 模型关联
- Eloquent 集合
- 修改器
- API 资源
- 序列化
- 测试相关
- 快速入门
- HTTP 测试
- 浏览器测试 Dusk
- 数据库测试
- 测试模拟器
- 官方扩展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Scout 全文搜索
- Socialite 社会化登录