Laravel密码重置令牌默认存于缓存(如Redis),非数据库;仅当配置为database驱动时才写入password_resets表,此时可经phpMyAdmin清空该表对应邮箱记录,而users表的remember_token与此无关。
直接删掉数据库里对应用户的 remember_token 和 password_reset_token(如果字段存在)值即可,但 laravel 默认并不存令牌到数据库——它用的是缓存或数据库的 password_resets 表,且过期后自动失效。
确认 Laravel 实际使用的密码重置驱动
Laravel 从 5.7 起默认用 cache 驱动存令牌(配合 Redis 或 file 缓存),而不是数据库;只有显式配置为 database 才会写入 password_resets 表。phpMyAdmin 只能干预后者。
- 检查
config/auth.php中'passwords' => ['users' => [... 'provider' => 'users', 'table' => 'password_resets', ...]]—— 若'table'存在且未被注释,才走数据库 - 若
'driver' => 'cache'(或没配table),phpMyAdmin 无法“重置令牌”,因为令牌根本不在 MySQL 里 - 运行
php artisan config:clear后查config('auth.passwords.users.driver')可验证当前生效驱动
在 phpMyAdmin 中清空 password_resets 表的正确操作
如果确认用了 database 驱动,password_resets 表就是唯一需要操作的地方。别碰 users 表的 remember_token 字段——它和密码重置无关。
- 打开 phpMyAdmin → 选中 Laravel 数据库 → 找到
password_resets表 - 执行 SQL:
DELETE FROM `password_resets` WHERE `email` = 'user@example.com';
(替换为真实邮箱) - 或者全清:
TRUNCATE TABLE `password_resets`;
——适合开发环境快速清理所有待重置请求 - 注意:该表有
created_at索引,Laravel 的DatabaseTokenRepository会自动忽略超时记录(默认 60 分钟),但手动删更彻底
为什么改 users 表的 token 字段没用?
users 表里的 remember_token 是登录态维持字段,由 Auth::login() 或 Auth::attempt() 写入;而密码重置流程完全不读写它。修改它只会让已登录用户登出,对重置链接无效。
- 重置链接中的 token 是独立生成、签名、存储在
password_resets表(或缓存)里的字符串 - 提交重置表单时,Laravel 会调用
Auth::resetPassword(),比对的是password_resets.token和 POST 的token参数 - 哪怕你把
users.remember_token改成和重置链接里一样的值,系统也不会认——它根本不查这个字段
真正要干预重置流程,要么清 password_resets 表,要么临时切驱动到 cache 并清 Redis/file 缓存;后者 phpMyAdmin 做不到,得进服务器操作。
立即学习“PHP免费学习笔记(深入)”;



















