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

NextAuth(Next.js)中如何从登录环节向JWT回调传递自定义数据?

在NextAuth v4中通过OAuth提供商传递自定义数据到JWT回调

核心实现步骤

1. 保留自定义参数到OAuth授权流程

调用signIn传入的自定义参数,需要在NextAuth的OAuth提供商配置里显式声明,避免被默认过滤。修改authOptions中对应提供商(如cognito_google)的配置:

// authOptions内的providers数组
providers: [
  {
    id: "cognito_google",
    // 基础配置(clientId、clientSecret、issuer等)
    authorization: {
      params: {
        // 声明需要传递的自定义参数
        customData: "{{customData}}"
      }
    }
  }
]

2. 捕获自定义参数并传入JWT回调

利用NextAuth的signIn回调提取自定义数据,再传递到jwt回调中:

// authOptions内的callbacks配置
callbacks: {
  async signIn({ user, request }) {
    // 从请求查询参数中获取自定义数据
    const customData = request.query.customData?.toString();
    if (customData) {
      // 将数据附加到user对象,供后续JWT回调读取
      user.customData = customData;
    }
    return true;
  },
  async jwt({ token, user }) {
    // 登录流程中把自定义数据存入JWT token
    if (user?.customData) {
      token.customData = user.customData;
    }
    return token;
  },
  // 可选:如果前端需要获取该数据,可在session回调中附加
  async session({ session, token }) {
    session.user.customData = token.customData;
    return session;
  }
}

3. 确保handler不拦截自定义参数

你的现有handler在错误处理后正常调用NextAuth(authOptions),只要错误逻辑未移除查询参数,自定义数据会自动传递到NextAuth内部流程,无需额外修改。

验证方法

  • 执行登录调用:signIn(providers['cognito_google'].id, undefined, { customData: 'data' });
  • 在signIn回调中打印request.query.customData,确认参数存在
  • 在jwt回调中打印token.customData,确认数据已存入JWT

内容的提问来源于stack exchange,提问作者Andrija Škontra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:46:05