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
相关产品推荐
相关产品推荐

