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

NextAuth v4 beta版本刷新时token不断嵌套问题如何解决

问题原因

这是NextAuth v4 beta版本的JWT回调参数结构变更+逻辑bug共同导致的:

  • v3版本的JWT回调第一个参数是包含所有上下文的完整payload,直接返回整个参数是符合预期的写法;但v4版本对回调参数做了调整,JWT回调只有一个入参对象,对象内部包含token、user、account等属性,其中token本身就是上一次回调生成的JWT序列化后的解析结果。
  • v4 beta版本的回调处理逻辑存在bug,当你直接返回整个入参对象时,框架会把这个完整对象当做新的token值,挂载到下一次回调入参的token属性下,每次刷新触发JWT回调就会多嵌套一层token,最终就会出现你遇到的token.token.token的无限嵌套问题。
解决方法

按以下步骤调整即可:

  1. 首先修正JWT回调的参数写法,先解构入参再返回核心token对象,不要直接返回整个入参:
jwt: async ({ token, user, account, profile, isNewUser }) => {
  // 仅当首次登录/授权有新的用户、账户信息传入时,才合并到token中
  if (user) {
    token.user = user
  }
  if (account) {
    token.accessToken = account.access_token
    token.refreshToken = account.refresh_token
  }
  return token
}
  1. 如果本地已经存在嵌套结构的旧token,需要加兼容逻辑处理历史数据,避免登录异常:
jwt: async ({ token, user, account }) => {
  // 提取真实token内容,兼容已经嵌套的旧数据
  const validToken = token.token ?? token
  if (user) {
    validToken.user = user
  }
  if (account) {
    validToken.accessToken = account.access_token
  }
  return validToken
}
  1. 如果你配置了自定义的encode/decode JWT序列化逻辑,同步检查逻辑是否存在重复包装token的问题,直接返回序列化后的纯字符串即可,不要额外套对象。

内容的提问来源于stack exchange,提问作者Ankush Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:03