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

Laravel auth()在线上Firefox的Ajax请求中返回未认证错误如何解决

Laravel 生产环境Firefox下auth中间件返回Unauthenticated问题解决方案

你遇到的Unauthenticated报错和CSRF配置无关,Laravel默认不对GET请求做CSRF校验,问题根因是auth中间件无法识别登录态,即请求未携带有效的Session Cookie。仅在生产+Firefox场景复现是因为Firefox对Cookie安全策略的校验比Chrome更严格,结合生产环境和本地环境的配置差异导致,可按以下步骤排查修复:

  • 修正路由配置错误
    你当前的路由链式调用写法错误,middleware方法直接传入中间件别名数组即可,不需要额外加middleware键:
// 修正前(错误写法)
Route::middleware(['middleware' => 'auth'])->group(function () {
// 修正后(正确写法)
Route::middleware(['auth'])->group(function () {
    Route::get('/test', [TestController::class, 'getTest']);
});
  • 调整Session Cookie安全配置
    打开项目config/session.php,核对以下配置项:

    • 生产环境为HTTPS时,必须将secure设为true
    • 若为跨域场景,same_site设为none;同域场景设为lax即可,禁止留空
    • domain配置为根域名,例如.example.com,保证前后端都能读取到Session Cookie
  • 补充AJAX跨域凭证配置
    如果你的前后端属于跨域部署,需要在AJAX配置中新增凭证携带参数,Firefox对此要求比Chrome更严格:

$.ajaxSetup({
     headers: {
         'X-CSRF-TOKEN': "{{ csrf_token() }}",
         'Accept': "application/json",
         'Content-Type': "application/json"
     },
     // 新增以下配置
     xhrFields: {
        withCredentials: true
     },
     crossDomain: true
});
  • 排查Firefox跟踪保护拦截
    Firefox默认开启的增强跟踪保护会拦截第三方Cookie,可暂时关闭该功能访问测试,如果恢复正常,可通过将前后端部署到同根域名下解决,或引导用户允许站点Cookie权限。

完成以上配置后清除浏览器缓存、生产端路由缓存后重试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:45:07