如何将Laravel Fortify双因素认证验证码有效期调整为30秒
修改Laravel Fortify双因素认证验证码有效期为30秒的方法
实现原理
Laravel Fortify双因素认证底层依赖pragmarx/google2fa包,默认验证时允许1个时间窗口偏差(每个时间窗口固定为30秒),因此验证码总有效期为前后各30秒共1分钟。要缩短为30秒,仅需将验证时的窗口偏差参数调整为0即可。
操作步骤
- 第一步:发布Fortify配置文件(如已发布可跳过)
执行命令:php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider" - 第二步:重写默认双因素验证逻辑
打开app/Providers/FortifyServiceProvider.php,在boot方法中添加如下代码:use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable; use PragmaRX\Google2FA\Google2FA; public function boot() { // 原有Fortify配置保留,新增以下代码即可 $this->app->when(RedirectIfTwoFactorAuthenticatable::class) ->give(function () { return new RedirectIfTwoFactorAuthenticatable( $this->app->make(Google2FA::class), 0 // 窗口偏差设置为0,仅接受当前30秒窗口的验证码 ); }); } - 第三步:生效验证
重新测试双因素认证功能即可,此时验证码会和Google Authenticator同步,每30秒自动过期,超出30秒的旧验证码会直接验证失败。
注意事项
- 调整为0偏差后需确保服务器时间与客户端时间同步,误差不能超过30秒,否则会出现合法验证码验证失败的问题。
- 该配置兼容Jetstream全前端栈(Livewire/Inertia),无需额外修改前端代码。
内容的提问来源于stack exchange,提问作者Xer0x
相关产品推荐
相关产品推荐

