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

如何判断Laravel Fortify中的Recovery Code是否已被使用

Laravel Fortify 恢复码使用状态查询方法

完全可以实现,Laravel Fortify 本身的双因素认证逻辑已经内置了相关能力,你可以按以下方式操作:

  • 首先确认你的 App\Models\User 模型已经引入了 Laravel\Fortify\TwoFactorAuthenticatable 这个 trait,恢复码相关的封装方法都在这个 trait 中定义。
  • 直接调用封装好的 recoveryCodeExists() 方法即可校验指定恢复码的状态,示例代码如下:
// $user 为需要校验的目标用户实例
$targetCode = '输入你要查询的恢复码';
$codeIsAvailable = $user->recoveryCodeExists($targetCode);

方法返回值说明:返回 true 代表恢复码未被使用、仍然有效;返回 false 代表恢复码已经被使用,或者不存在于当前用户的恢复码列表中。

如果你需要手动实现校验逻辑,可以参考 Fortify 底层的实现方式:

// 解码存储在 users 表 two_factor_recovery_codes 字段的恢复码列表
$recoveryCodes = json_decode($user->two_factor_recovery_codes, true);

// 哈希比对,避免时序攻击
$codeIsAvailable = collect($recoveryCodes)->contains(function ($storedCode) use ($targetCode) {
    return hash_equals($storedCode, hash('sha1', $targetCode));
});

注意:恢复码默认经过 SHA1 哈希后存储,不要直接用明文和存储值做比对,避免安全风险,优先使用官方提供的封装方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 06:36:08