JetClient调用本地DDEV服务器:Fortify 2FA认证问题排查
解决Laravel Fortify 2FA来源认证问题
1. 确认JetClient实际请求的Origin
先明确前端请求API时的真实Origin头,这是核心:
- 打开Laravel项目的
app/Http/Middleware/VerifyCsrfToken.php,在handle方法开头添加日志代码:use Illuminate\Support\Facades\Log; public function handle(Request $request, Closure $next) { Log::info('Request Origin: ' . $request->header('Origin', 'NONE')); Log::info('Request Host: ' . $request->getHost()); return $next($request); } - 启动DDDev环境,用JetClient发起2FA相关请求(比如登录后的2FA验证)
- 查看Laravel日志文件
storage/logs/laravel.log,找到打印的Request Origin值,这就是需要配置的来源地址。
2. 配置CORS允许该来源
打开config/cors.php,更新allowed_origins数组,加入刚才获取到的Origin:
'allowed_origins' => [ 'http://your-jetclient-ddev-url.ddev.site', // 替换为实际的Origin值 ],
开发环境下也可以用通配符简化配置:
'allowed_origins' => [ '*.ddev.site', ],
3. 配置Sanctum的Stateful Domains
Fortify依赖Sanctum处理会话,需将前端域名加入config/sanctum.php的stateful数组:
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( '%s%s', 'your-jetclient-ddev-url.ddev.site,localhost,127.0.0.1,::1', env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : '' ))),
或直接在.env文件中设置:
SANCTUM_STATEFUL_DOMAINS=your-jetclient-ddev-url.ddev.site,localhost,127.0.0.1
4. 验证CSRF令牌携带
Fortify的2FA流程需要CSRF令牌,确保前端请求符合要求:
- 先请求
/sanctum/csrf-cookie获取CSRF令牌 - 后续2FA请求的请求头中需包含
X-XSRF-TOKEN,值为获取到的令牌
5. 清除配置缓存
修改配置后执行以下命令生效:
ddev artisan config:clear ddev artisan cache:clear
若问题仍存在,可检查浏览器控制台的Network标签,确认请求的Access-Control-Allow-Origin响应头是否匹配前端Origin,同时确认DDDev代理配置未拦截请求。
内容的提问来源于stack exchange,提问作者Beertastic
相关产品推荐
相关产品推荐

