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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:01:03