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

如何在NextAuth中处理Google登录,拆分姓名填充User表字段

拆分Google登录Name字段填充至User表解决方案

要将Google Provider返回的name字段拆分为firstname和lastname并写入数据库User表,需按以下步骤修改代码:

1. 自定义Google Provider的Profile回调

在[...nextauth].ts的GoogleProvider配置中添加profile回调,处理姓名拆分逻辑:

GoogleProvider({
  clientId: env.GOOGLE_ID,
  clientSecret: env.GOOGLE_SECRET,
  profile(profile) {
    // 拆分姓名,适配"名 姓"格式,支持带中间名的情况
    const nameSegments = profile.name?.split(' ') || [];
    const firstname = nameSegments[0] || '';
    const lastname = nameSegments.slice(1).join(' ') || '';

    return {
      id: profile.sub,
      firstname,
      lastname,
      email: profile.email,
      image: profile.picture,
      emailVerified: profile.email_verified ? new Date(profile.email_verified) : null,
    };
  },
}),

2. 更新JWT与Session回调

确保拆分后的姓名字段能存入JWT并同步到前端Session:

callbacks: {
  async jwt({ token, user }) {
    // 首次登录时,user包含profile回调返回的自定义字段
    if (user) {
      token.id = user.id;
      token.firstname = user.firstname;
      token.lastname = user.lastname;
    }
    return token;
  },
  session({ session, token }) {
    if (token) {
      session.user.id = token.id as string;
      session.user.firstname = token.firstname as string;
      session.user.lastname = token.lastname as string;
      session.user.image = token.picture as string;
    }
    return session;
  },
},

3. 验证数据写入

新用户通过Google登录时,PrismaAdapter会自动将firstname和lastname写入User表——因为我们在profile回调中返回了这些字段,且User模型已定义对应的字段。

注意事项

  • 若用户姓名格式特殊(如单名、非英文姓名),需调整拆分逻辑适配实际场景;
  • 确保已执行npx prisma migrate dev将User模型结构同步到数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:40:33