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
相关产品推荐
相关产品推荐

