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

使用signInWithCustomToken登录后Firebase认证Provider和identifier为空

解决Firebase控制台不显示Provider和identifier的问题

你当前的问题核心在于:自定义Token里的provider自定义Claims不会同步到Firebase用户记录的providerData字段,而Firebase控制台的用户列表正是从providerData读取Provider和identifier信息的,所以仅传递自定义Claims无法让控制台正确显示。

要解决这个问题,需要直接通过Firebase Admin SDK修改用户记录的providerData,具体步骤如下:

1. 在服务端同步用户Provider数据

当用户完成NextAuth的Google认证后,在服务端(比如NextAuth的回调逻辑中)调用Firebase Admin SDK的updateUser方法,为用户添加Google提供商的凭据信息:

// 导入Firebase Admin SDK
import admin from 'firebase-admin';

// 同步Firebase用户的Provider数据
async function syncFirebaseProviderData(nextAuthUser, nextAuthAccount) {
  const userId = nextAuthUser.id; // NextAuth用户ID,对应Firebase的UID
  const googleProviderData = {
    providerId: 'google.com', // Firebase标准的Google提供商ID
    uid: nextAuthAccount.providerAccountId, // 用户在Google平台的唯一ID
    email: nextAuthUser.email,
    displayName: nextAuthUser.name,
    photoURL: nextAuthUser.image,
  };

  try {
    await admin.auth().updateUser(userId, {
      providerData: [googleProviderData],
    });
  } catch (err) {
    console.error('更新Firebase用户Provider数据失败:', err);
  }
}

可以把这个逻辑嵌入NextAuth的signIn回调,确保用户登录时自动同步:

// auth.ts中的signIn回调
signIn: async ({ user, account }) => {
  if (account?.provider === 'google') {
    await syncFirebaseProviderData(user, account);
  }
  return true;
}

2. 简化自定义Token生成逻辑

自定义Token不需要携带provider相关的自定义Claims,它仅用于完成Firebase认证,不会修改用户记录。修改你的session回调:

session: async ({ session, token }) => {
  if (session.user && token.sub) {
    session.user.id = token.sub;
    // 生成基础自定义Token即可,无需附加provider Claims
    const firebaseToken = await admin.auth().createCustomToken(token.sub);
    session.firebaseToken = firebaseToken;
  }
  return session;
}

3. 验证效果

完成修改后,用户再次登录时:

  • Firebase控制台用户列表中,该用户的Provider会显示为Google
  • Identifier会自动匹配用户的Google邮箱或对应ID

关键说明

  • Firebase的providerData是用户记录的核心字段,仅能通过Admin SDK在服务端修改,客户端无操作权限。
  • 自定义Token的自定义Claims仅用于业务逻辑的权限判断等场景,不会影响控制台展示的用户身份信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:23:18