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

如何为Laravel Fortify邮箱功能创建可用的$token

问题根因

你当前的实现存在3个核心问题导致token无法被Fortify校验通过:

  • 生成的随机token没有存入Fortify用于校验的password_resets表,Fortify校验令牌时会优先匹配表内的存储记录,不存在的token会直接被判定为非法
  • 你没有对token做哈希加密处理,Laravel/Fortify存储在password_resets表内的token是经过哈希运算后的值,明文token无法通过哈希匹配校验
  • 你完全绕过了Fortify自带的令牌生成逻辑,令牌有效期、重复请求校验等默认规则全部未生效,也会导致校验失败
修复方案

直接调用Laravel密码系统自带的令牌生成方法即可,不需要手动生成随机字符串:

use Illuminate\Support\Facades\Password;

public function store(UserCreateRequest $request): RedirectResponse
{
    $user = User::create(
        array_merge(
            $request->validated(),
            ['password' => bcrypt(Str::random(8))]
        )
    );

    // 自动生成合法令牌、哈希后存入password_resets表、自带有效期校验
    $token = Password::createToken($user);
    
    $user->sendPasswordCreateNotification($token);
}

补充注意事项

  • 如果你自定义了sendPasswordCreateNotification通知类,邮件内的跳转链接需要和Fortify默认的密码重置路由规则一致,必须携带email和token两个参数,否则会出现路由/参数校验失败
  • 令牌默认有效期可以在config/fortify.php的defaults.passwords.expire配置项中调整,单位为分钟
  • 确保你的User模型实现了Illuminate\Contracts\Auth\CanResetPassword契约,否则令牌生成逻辑会报错

内容的提问来源于stack exchange,提问作者Aipo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:02