You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel忘记密码功能提示无效Token 手动Hash::check验证正常如何解决

Laravel 密码重置提示无效Token的问题原因及解决方案

常见原因及对应解决方法:

  • Token传递编码异常
    你手动校验Hash::check验证通过说明原始Token和数据库哈希值匹配,但是实际请求传递的Token可能存在URL编码转义问题,比如邮件链接中的Token被自动urlencode,后端接收后未解码就直接传入校验逻辑,导致匹配失败。
    解决方法:先打印输出$request->input('token')和邮件内的原始Token对比,确认是否一致。存在编码问题可先对Token做解码处理:
$credentials = $request->only('email', 'password', 'password_confirmation');
// 解码处理Token
$credentials['token'] = urldecode($request->input('token'));

$status = Password::reset(
    $credentials,
    function ($user, $password) {
        $user->forceFill([
            'password' => Hash::make($password),
        ])->save();

        event(new PasswordReset($user));
    }
);
  • 邮箱信息不匹配
    Password::reset 会同时校验password_resets表中对应邮箱和Token的关联关系,哪怕Token本身校验通过,只要传入的邮箱和生成Token时的邮箱不一致,也会返回无效Token提示,常见于邮箱大小写不匹配问题。
    解决方法:发送重置链接和提交重置请求时统一处理邮箱大小写:
// 发送重置链接端统一邮箱转小写
$status = Password::sendResetLink(
    ['email' => strtolower($request->input('email'))]
);

// 重置请求端统一邮箱转小写
$credentials = $request->only('password', 'password_confirmation', 'token');
$credentials['email'] = strtolower($request->input('email'));
  • Token已过期
    Laravel默认密码重置Token有效期为60分钟,超过有效期Password::reset也会返回无效Token提示,如果你在config/auth.php中修改过passwords.users.expire参数设置过短也会触发该问题。
    解决方法:检查config/auth.php中passwords配置项的expire参数,调整为符合业务需要的时长,测试时使用刚生成的重置链接验证。

  • 密码代理配置不匹配
    如果你使用了非默认的用户认证守卫,比如后台管理员账号重置密码,Password门面默认调用users类型的密码代理,代理不匹配会导致校验失败。
    解决方法:重置密码时指定对应的密码代理:

// 示例为管理员账号重置
$status = Password::broker('admins')->reset($credentials, function ($user, $password) {
    // 重置逻辑
});

内容的提问来源于stack exchange,提问作者Aslam-Ep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:48:04