Nuxt2使用@nuxtjs/auth时staging环境刷新页面用户自动登出问题
问题排查步骤
验证staging环境下
user接口的访问合法性
刷新页面后@nuxtjs/auth会自动携带存储的token请求配置的api/user/fetch-logged-in接口,只要该接口返回非200状态码,auth模块就会判定登录失效,自动触发登出逻辑。你可以打开浏览器控制台网络面板,刷新页面查看该请求的状态:- 如果返回401/403,检查token传递格式是否符合staging后端要求:你的配置里
tokenType设为空字符串,正常请求头应为Authorization: <token>,确认staging后端是否要求加Bearer前缀?本地后端可能做了兼容未校验前缀,staging环境严格校验就会请求失败。 - 如果接口返回404,检查nuxt的axios
baseURL配置:staging环境的api前缀是否和本地不一致?比如本地是/api开头,staging需要加项目前缀或域名,你配置的user接口是相对路径,baseURL错误就会请求到错误地址。
- 如果返回401/403,检查token传递格式是否符合staging后端要求:你的配置里
检查Cookie/Storage的域和路径配置
如果你将token存在Cookie中(@nuxtjs/auth默认同时存localStorage和Cookie),确认staging环境下Cookie的domain、path、secure属性配置正确:- 如果staging站点用HTTPS,要确认auth模块的cookie配置里
secure设为true,如果未开HTTPS则不能设置secure,否则Cookie不会被携带在请求中 - 确认Cookie的domain配置和staging站点的域名匹配,跨域场景下Cookie不会被自动携带
- 如果staging站点用HTTPS,要确认auth模块的cookie配置里
检查服务端渲染(SSR)逻辑的权限判断
如果你的Nuxt应用开启了SSR模式,刷新页面时会先在服务端执行auth校验逻辑:- 确认服务端可以正确获取到Cookie里的token,多数情况下客户端localStorage里有token,但服务端无法读取localStorage内容,只能靠Cookie传递token,如果Cookie配置错误服务端拿不到token,就会直接返回登录页重定向,看起来就像被自动登出
- 可以临时将应用改成SPA模式部署测试,如果SPA模式下刷新不会登出,就可以确定是SSR侧的token获取逻辑有问题
快速验证修复方案
可以先加临时配置,关闭user接口的自动请求,测试是否是user接口的问题:
auth: { strategies: { local: { endpoints: { user: false // 临时关闭自动拉取用户信息 } } } }
如果改完刷新不会登出,就可以100%确定是user接口请求失败导致的问题,针对性排查接口即可。
内容的提问来源于stack exchange,提问作者gogo_rulez
相关产品推荐
相关产品推荐

