Nuxt Auth Module v5 token过期无法自动刷新令牌配置问题咨询
问题排查&修复方案
一、配置错误项修正
- 登录接口返回字段映射错误
你当前配置中endpoints.login.propertyName设为了token,但实际登录接口返回的访问令牌字段是access_token,模块无法正确读取到访问令牌,导致后续所有认证逻辑异常。 - 令牌有效期字段未适配
@nuxtjs/auth v5的refresh scheme默认读取接口返回的expires_in字段作为令牌有效期,你的接口返回的是拼写错误的expired_in(多了字母d),模块无法获取正确的有效期,会导致刷新时机判断异常。如果不修改接口返回,需要在token配置中添加expiresInProperty: 'expired_in'适配。 - 可选优化:建议明确指定刷新接口的返回字段映射,避免默认规则不匹配。
二、接口返回结构问题修复
- 登录接口缺失refresh_token返回
你当前提供的登录接口返回值中没有refresh_token字段,模块无法存储刷新令牌,自然无法触发后续的刷新逻辑,必须在登录接口返回中补充有效refresh_token。 - 刷新接口缺失access_token返回
你当前提供的刷新接口返回值中只有新的refresh_token,没有返回新的access_token,刷新逻辑执行后无法获取新的访问令牌,会直接失效,必须在刷新接口返回中补充新的access_token。
三、修正后配置参考
auth: { redirect: { login: '/account/login/', logout: '/account/login/', callback: '/account/login/', home: '/account/beams/' }, strategies: { local: { scheme: 'refresh', token: { property: 'access_token', maxAge: 120, global: true, // 适配你接口返回的过期字段名 expiresInProperty: 'expired_in' }, refreshToken: { property: 'refresh_token', data: 'refresh_token', maxAge: 1209600, // 刷新接口返回的刷新令牌有效期字段也适配 expiresInProperty: 'expired_in' }, user: { property: 'user', autoFetch: true }, endpoints: { // 移除错误的propertyName配置,或者改为access_token login: { url: '/api/account/login', method: 'post' }, refresh: { url: '/api/account/refresh', method: 'post' }, logout: { url: '/api/account/logout', method: 'post' }, user: { url: '/api/account', method: 'get' } }, autoLogout: false } } }
四、验证步骤
- 登录后检查浏览器本地存储/ Cookie中是否同时存在
auth._token.local和auth._refresh_token.local两个有效存储值 - 触发接口请求确认401后,是否自动调用
/api/account/refresh接口,且请求参数中带有正确的refresh_token - 刷新接口返回后验证存储中的access_token是否更新为新值,后续请求是否携带新的access_token
内容的提问来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

