NextJS集成Auth0调用getAccessToken缺refresh token报错
问题原因
配置存在两个核心错误,导致session中没有存储refresh token:
useRefreshTokens配置项位置错误:该参数是handleLogin方法的顶层配置,不属于authorizationParams嵌套字段,你当前把它写在authorizationParams内部,SDK无法识别该配置,不会将Auth0返回的refresh token持久化到session中,后续调用getAccessToken并开启refresh: true时,自然拿不到refresh token触发报错。- 旧session缓存问题:如果修改配置前你已经完成过登录,本地存储的旧session本身是在未正确配置refresh token逻辑时生成的,本身就不包含refresh token字段,改完配置不重新登录也会触发该错误。
修复方案
按以下步骤调整即可:
- 修正
[...auth0].ts的配置层级,将useRefreshTokens挪到与authorizationParams平级的位置,修正后代码如下:
export default handleAuth({ async login(req, res) { try { await handleLogin(req, res, { // 刷新令牌配置放在handleLogin顶层,不要嵌套在authorizationParams内 useRefreshTokens: true, authorizationParams: { audience: "gateway.dev.abcdDomain.com", scope: "openid profile email offline_access", }, }); } catch (error) { res.status(error.status || 400).end(error.message); } }, })
- 登录Auth0管理后台,进入对应应用的设置页面,找到Refresh Token相关配置,开启刷新令牌功能,确认应用允许发放
offline_access对应的refresh token权限。 - 清除浏览器下当前站点的所有cookie缓存,重新走完整登录流程,新生成的session会正确存储refresh token,调用
getAccessToken时不会再触发该报错。
注:你当前写的
afterRefresh回调仅删除idToken字段,不会影响refresh token的读取,不需要调整。
内容的提问来源于stack exchange,提问作者Prateek Naik
相关产品推荐
相关产品推荐

