Laravel 5.5的邮箱密码重置功能依赖框架内置的密码重置模块,本地环境测试正常但生产环境失效,需要从多个维度排查问题。

常见失效原因及排查步骤
1. 邮件配置参数错误
生产环境的邮件驱动、发件人地址、域名等配置和本地不同,若配置错误会导致生成的重置链接域名不正确。首先检查.env文件中的邮件相关配置:
// 正确的生产环境邮件配置示例 MAIL_DRIVER=smtp MAIL_HOST=smtp.ipipp.com MAIL_PORT=465 MAIL_USERNAME=service@ipipp.com MAIL_PASSWORD=your_mail_password MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=service@ipipp.com MAIL_FROM_NAME=应用名称 // 应用域名配置,重置链接会使用该域名生成 APP_URL=https://www.ipipp.com
注意APP_URL必须填写生产环境的正确访问域名,否则生成的重置链接会使用默认的localhost,导致点击后无法访问。
2. 路由缓存导致配置未生效
生产环境通常会开启路由缓存,如果修改了密码重置相关的路由或者配置,没有清除缓存会导致旧配置生效。执行以下命令清除缓存:
php artisan route:clear php artisan config:clear php artisan cache:clear
3. 密码重置令牌过期或存储异常
Laravel的密码重置令牌默认有效期是1小时,若生产环境服务器时间和本地时间不一致,或者数据库中的password_resets表结构异常,会导致令牌验证失败。首先检查数据库表结构:
| 字段名 | 类型 | 说明 |
|---|---|---|
| varchar(255) | 用户邮箱 | |
| token | varchar(255) | 加密后的重置令牌 |
| created_at | timestamp | 令牌生成时间 |
如果表结构缺失,可以执行密码重置表迁移命令重新生成:
php artisan migrate:refresh --path=database/migrations/2014_10_12_100000_create_password_resets_table.php
4. 队列任务未执行
如果邮件发送使用了队列驱动,生产环境没有启动队列进程会导致邮件无法及时发送,或者重置链接没有正常生成。检查队列配置后,启动队列监听:
php artisan queue:work --daemon
验证修复效果
完成上述排查和修改后,可以在生产环境测试密码重置流程:访问密码重置页面输入注册邮箱,检查收到的邮件中的重置链接域名是否正确,点击链接后是否能正常跳转到密码设置页面,提交新密码后是否能正常登录。如果还有问题,可以开启Laravel的日志功能,查看storage/logs/laravel.log中的错误记录,进一步定位问题。
Laravel_5.5密码重置邮件配置生产环境路由配置修改时间:2026-06-12 06:18:19