如何判断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
相关产品推荐
相关产品推荐

