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
- 生产环境为HTTPS时,必须将
补充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
相关产品推荐
相关产品推荐

