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

Laravel Sanctum生产环境始终返回401未授权问题求助

生产环境下Laravel Sanctum + Nuxt3登录后401 Unauthorized问题解决思路

本地开发时,使用Vitesse-Nuxt3前端模板搭配Laravel 9 Sanctum后端,引入nuxt-sanctum-auth包完全正常,但部署到生产环境后,登录确认成功,请求通过auth:sanctum中间件时却出现401未授权错误。前后端采用HTTPS子域名架构:前端https://fe.mydomain.com,后端https://be.mydomain.com,Postman测试接口正常,问题集中在前后端交互环节。

已尝试的配置如下:

  1. .env文件设置:
SANCTUM_STATEFUL_DOMAINS="mydomain.com"
SESSION_DRIVER=cookie
SESSION_DOMAIN=.mydomain.com
  1. cors.php文件配置:
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'supports_credentials' => true,

排查与解决步骤

  • 修正SANCTUM_STATEFUL_DOMAINS配置
    子域名场景下,需精确指定前端域名而非根域名。将.env中的SANCTUM_STATEFUL_DOMAINS修改为前端实际域名:

    SANCTUM_STATEFUL_DOMAINS="fe.mydomain.com"
    

    Sanctum的stateful domains需要匹配发起请求的具体前端域名,根域名配置无法正确识别子域名请求。

  • 检查Nuxt端sanctum配置
    确保nuxt.config.ts中sanctum模块的配置正确开启凭证携带,并同步Cookie域名:

    export default defineNuxtConfig({
      modules: ['nuxt-sanctum-auth'],
      sanctum: {
        baseUrl: 'https://be.mydomain.com',
        credentials: true,
        csrfCookie: {
          path: '/',
          domain: '.mydomain.com'
        }
      }
    })
    

    核心是credentials: true必须开启,保证请求自动携带Cookie;csrfCookie的domain要与后端SESSION_DOMAIN保持一致。

  • 验证HTTPS环境下的Cookie属性
    生产HTTPS环境中,Cookie需开启secure属性。打开Laravel的config/session.php确认:

    'secure' => env('SESSION_SECURE_COOKIE', true),
    

    同时将same_site设置为'lax'(跨子域名场景下足够),若跨顶级域名可设为'none'(但必须配合secure: true):

    'same_site' => 'lax',
    
  • 确认请求的Cookie携带状态
    登录成功后,在浏览器开发者工具的Application -> Cookies中,检查是否存在laravel_session和XSRF-TOKEN,且它们的Domain为.mydomain.com、Secure属性为true。
    发起受保护请求时,查看Network面板的Request Headers,确认Cookie字段和X-XSRF-TOKEN头是否正确携带。

  • 清理浏览器缓存与Cookie
    生产环境可能残留旧Cookie缓存导致验证失败,手动清除对应域名的Cookie后重新测试。

内容的提问来源于stack exchange,提问作者Lekz Flores

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:30:11