Laravel内置密码重置功能,只需配置用户模型、生成password_reset_tokens表、设置邮件驱动并启用Auth路由即可实现完整流程。
在Laravel中实现
密码重置
功能非常方便,框架自带了一套完整的认证系统,包括用户注册、登录、
邮箱
验证以及密码找回与重置。开发者只需简单配置即可快速启用密码重置功能。
1. 确保用户模型支持密码重置
Laravel默认的
App\Models\User
模型已经集成了
Authenticatable
和
MustVerifyEmail
等trait,要支持密码重置,还需确保该模型使用了
CanResetPassword
接口(通常由
Notifiable
提供),且数据库中的users表包含
email
字段。
检查User模型:
}
2. 生成并运行密码重置迁移
Laravel提供了内置的迁移文件用于创建
password_reset_tokens
表(旧版本为
password_resets
),用于存储密码重置令牌。
生成迁移:
或直接确保存在迁移文件:
create_password_reset_tokens_table.php
运行迁移:
3. 配置邮件驱动
密码重置需要发送邮件,因此必须配置邮件服务。可在
.env
文件中设置邮件驱动,推荐开发阶段使用
log
或
smtp
。
.env 示例:
测试邮件是否能正常发送,可使用
Mail::raw()
写一个简单的测试
路由
。
4. 使用 Laravel 自带的路由和控制器
Laravel 提供了开箱即用的密码重置控制器和路由。可通过以下命令查看:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
生成认证脚手架(Laravel 8+):
或手动引入路由:
相关路由包括:
/password/reset
- 请求重置页面
/password/email
- 发送重置链接
/password/reset/{token}
- 重置密码
表单提交
5. 自定义视图(可选)
Laravel 的密码重置页面位于
resources/views/auth/passwords/
目录下,包括:
email.blade.php - 邮件发送表单
reset.blade.php - 密码重置表单
你可以根据项目UI修改这些视图内容。
6. 测试密码重置流程
启动应用后,访问:
输入注册邮箱,点击发送。系统会生成token并存入
password_reset_tokens
表,同时向用户邮箱发送重置链接。
点击邮件中的链接跳转到重置页面,输入新密码并提交,完成重置。
7.
常见问题
处理
邮件未收到?
检查邮箱配置、网络、垃圾箱,或开启日志驱动调试。
Token无效或过期?
Laravel默认token有效期为60分钟,可在
config/auth.php
中调整
passwords.users.expire
。
自定义Guard或模型?
需在
auth.php
中配置对应provider,并确保模型正确实现CanResetPasswordContract。
基本上就这些。Laravel的密码重置机制设计合理,只要配置好邮件和数据库,几分钟内就能跑通整个流程。
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
// 默认已支持密码重置
php artisan make:authphp artisan migrateMAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your@gmail.com
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your@gmail.com
MAIL_FROM_NAME="Your App"
php artisan make:auth// routes/web.php
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
Auth::routes(); // 包含登录、注册、密码重置等路由
/password/reset