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

QA环境下@sidebase/nuxt-auth刷新页面后access token丢失求助

问题描述

我使用版本为^0.10.0的@sidebase/nuxt-auth。登录后,access token(auth._token)和refresh token(auth._refresh-token)会自动存储在本地环境的localhost域名Cookie中,或QA环境的.my-qa-domain域名Cookie中。但在QA环境下,认证后刷新页面时,access token会被删除,而refresh token不会丢失,本地环境无此问题。目前已通过useAuth的refresh函数临时解决该问题,请问如何避免access token被删除?

nuxt.config配置如下:

auth: {
  isEnabled: true,
  baseURL: `${process.env.NUXT_PUBLIC_PROTOCOL}${process.env.NUXT_PUBLIC_DOMAIN}:${process.env.NUXT_PUBLIC_PORT}/`,
  provider: {
    type: 'local',
    endpoints: {
      signIn: {path: 'api/auth/login', method: 'post'},
      signOut: {path: 'api/auth/logout', method: 'post'},
      signUp: {path: 'api/auth/register', method: 'post'},
      getSession: {path: 'api/user', method: 'get'},
    },
    token: {
      signInResponseTokenPointer: '/access_token',
      type: 'Bearer',
      cookieName: 'auth._token',
      headerName: 'Authorization',
      maxAgeInSeconds: 60 * 60 * 3,
      sameSiteAttribute: 'lax',
      cookieDomain: `${process.env.NUXT_FRONTEND_DOMAIN}`,
      secureCookieAttribute: false, 
      httpOnlyCookieAttribute: false,
    },
    refresh: {
      isEnabled: true,
      endpoint: {path: 'api/auth/refresh', method: 'post'},
      refreshOnlyToken: false, 
      token: {
        signInResponseRefreshTokenPointer: '/refresh_token',
        refreshRequestTokenPointer: '/refresh_token',
        cookieName: 'auth._refresh-token',
        maxAgeInSeconds: 60 * 60 * 3,
        sameSiteAttribute: 'lax',
        secureCookieAttribute: false, 
        cookieDomain: `${process.env.NUXT_FRONTEND_DOMAIN}`,
        httpOnlyCookieAttribute: false,
      }
    },
  },
  sessionRefresh: {
    enablePeriodically:  1000 * 60 * 60,   
    enableOnWindowFocus: false,             
  }
}
排查与解决方案建议
  • 检查CookieDomain配置:确认QA环境的NUXT_FRONTEND_DOMAIN是否设置为.my-qa-domain(注意前缀的点,确保子域名也能共享Cookie)。如果配置的是具体子域名(比如app.my-qa-domain),刷新时可能因为域名匹配问题导致access token Cookie被清除,而refresh token因为配置正确保留。
  • 验证secureCookieAttribute设置:如果QA环境使用HTTPS,secureCookieAttribute需要设为true,否则浏览器可能在安全环境下拒绝保存或自动清除非secure的Cookie。本地环境用HTTP所以没问题,但QA环境如果是HTTPS就会触发这个问题。
  • 检查getSession接口返回:刷新页面时nuxt-auth会调用getSession接口验证会话,如果接口返回中没有正确携带access token相关信息,或者接口返回失败(比如状态码非200),插件可能会自动清除access token。确认QA环境的api/user接口在刷新时能正常返回用户信息,且响应能让插件确认会话有效。
  • 排查Cookie有效期:确认access token的maxAgeInSeconds配置是否正确,检查QA环境的服务器时间和客户端时间是否有偏差,避免Cookie提前过期。
  • 修改httpOnlyCookieAttribute:将access token的httpOnlyCookieAttribute设为true,避免前端JS意外修改或清除Cookie,同时提升安全性。
  • 升级nuxt-auth版本:^0.10.0是较老的版本,后续版本可能修复了环境特定的Cookie处理bug,尝试升级到最新兼容版本(比如v0.2.x或更高),看是否能解决问题。

内容的提问来源于stack exchange,提问作者Kirill Donenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:42:46