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

Laravel Sanctum搭配Nuxt JS部署后返回Unauthenticated报错求助

Nuxt + Laravel Sanctum 认证异常修复方案

以下是配置中存在的明确问题及对应修复方式,按顺序调整即可解决:

  • Session 域名与Sanctum白名单配置错误
    当前.env中SESSION_DOMAIN设置为api.example.com会导致认证Cookie仅在API子域生效,前端主域无法读取、携带Cookie完成认证;SANCTUM_STATEFUL_DOMAINS未覆盖全量可信域名,Sanctum会将前端请求判定为第三方请求,拒绝发放认证凭证;HTTP部署场景下默认开启的Secure Cookie属性会阻止非HTTPS环境下的Cookie写入。
    修复后.env配置:
    SESSION_DRIVER=file
    SESSION_LIFETIME=120
    # 前置点号配置,支持主域与所有子域共享Cookie
    SESSION_DOMAIN=.example.com
    # 填入所有可信前端域名,非80/443端口必须追加端口号
    SANCTUM_STATEFUL_DOMAINS=example.com,api.example.com
    # HTTP环境下设为false,HTTPS环境下设为true
    SESSION_SECURE_COOKIE=false
    SANCTUM_COOKIE_SECURE=false
    
  • CORS配置不符合凭证请求规范
    跨域携带Cookie的请求场景下,allowed_origins不能设置为通配符*,否则浏览器会直接拦截跨域响应,不会写入认证Cookie。
    修复后cors.php配置:
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    
    'allowed_methods' => ['*'],
    // 明确填写前端访问地址,必须与浏览器地址栏的协议、域名、端口完全一致
    'allowed_origins' => ['http://example.com', 'https://example.com'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => true,
    
  • Nuxt侧配置缺失与协议不匹配
    首先要保证Axios的baseURL协议和前端访问协议一致:如果前端通过HTTPS访问,API地址必须也为HTTPS,否则会触发浏览器混合内容拦截,请求直接被阻断;另外auth模块未显式开启凭证携带,部分场景下会出现请求未带Cookie的问题。
    修复后nuxt.config.js对应配置段:
    auth: {
        strategies: {
          cookie: {
            // 强制认证类请求携带跨域凭证
            withCredentials: true,
            endpoints: {
              csrf: { url: '/sanctum/csrf-cookie' },
              login: { url: '/api/login' },
              register: { url: '/api/register' },
              logout: { url: '/api/logout' },
              user: { url: '/api/user' }
            },
            user: { property: 'data' },
          }
        },
        redirect: {
          login: '/auth/login',
          logout: '/auth/login',
          home: '/dashboard',
        },
        plugins: ['~/plugins/axios']
      },
    
      axios: {
        // 协议与前端访问协议保持一致,HTTPS环境替换为https://api.example.com
        baseURL: 'http://api.example.com',
        credentials: true
      },
    
  • 落地验证步骤
    1. 给Laravel项目storage目录设置755权限,保证Web进程有Session写入权限
    2. 执行php artisan config:clear清除配置缓存,避免旧配置生效
    3. 清除浏览器下所有相关域名的Cookie,先请求/sanctum/csrf-cookie接口,在开发者工具-应用-Cookies面板检查是否存在laravel_session、XSRF-TOKEN两个Cookie,且Domain值为.example.com
    4. Cookie正常写入后再走登录、获取用户信息流程即可。

内容的提问来源于stack exchange,提问作者Henry Oladeji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:12:18