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

Google登录后在NextAuth中向会话传递更多自定义数据

在NextAuth Google登录后扩展会话,添加数据库用户信息

要实现认证通过后调用fetchUserInfo并将数据库用户信息存入会话,你需要利用NextAuth的jwt和session回调来扩展默认的会话数据,具体步骤如下:

  1. 确保fetchUserInfo是异步函数(数据库查询通常是异步操作):
const fetchUserInfo = async (email) => {
  // 替换为实际的数据库查询逻辑,比如:
  // return await prisma.user.findUnique({ where: { email } });
};
  1. 在NextAuth配置中添加jwt和session回调,将数据库用户信息存入JWT并同步到会话:
import NextAuth from 'next-auth'
import Providers from 'next-auth/providers'

const fetchUserInfo = async (email) => {
  // Get user info in database by google email
};

export default NextAuth({
    providers: [
        Providers.Google({
            clientId: process.env.GOOGLE_ID,
            clientSecret: process.env.GOOGLE_SECRET,
        }),
    ],
    callbacks: {
        async signIn(user, account, profile) {
            if (account.provider === 'google' &&
                profile.verified_email === true &&
                profile.email.endsWith('@example.com')) {
                return true
            } else {
                return false
            }
        },
        // 在JWT生成/更新时获取数据库用户信息
        async jwt({ token, user }) {
            // 首次登录时user对象存在,此时查询数据库
            if (user) {
                token.dbUser = await fetchUserInfo(user.email);
            }
            return token;
        },
        // 将JWT中的自定义数据同步到会话
        async session({ session, token }) {
            // 把数据库用户信息添加到会话的user对象中
            session.user.dbUser = token.dbUser;
            return session;
        },
    },
    pages: {
        signIn: '/auth/signin',
    },
    secret: process.env.SECRET
})

逻辑说明

  • jwt回调:用户首次登录成功后,会触发该回调,此时通过user.email调用fetchUserInfo获取数据库中的用户信息,并将其存入JWT token。后续会话验证时,token会被复用,无需重复查询(若需要定期刷新数据,可在此添加额外逻辑)。
  • session回调:每次前端通过useSession或getSession获取会话信息时,该回调会把JWT中的自定义数据库用户信息同步到session.user中,这样前端就能直接使用这些数据。

内容的提问来源于stack exchange,提问作者Phạm Hoài Lâm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:01:04