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

使用signInWithCustomToken登录后无法获取用户详情求助

解决signInWithCustomToken登录后用户对象缺少详情的问题

问题根源

登录后返回的User对象大概率是本地缓存的基础身份数据,未实时同步最新的用户详情;也可能是服务器端生成令牌时,目标用户本身就未设置displayName、email这类属性。

具体解决方案

1. 主动刷新用户信息

登录成功后调用user.reload()方法拉取最新的用户数据,之后再提取所需字段:

async function signinWithToken(data, sendResponse) {
  const { token } = data;
  try {
    const user = await signInWithCustomToken(auth, token);
    // 刷新用户信息,同步服务器端最新数据
    await user.reload();
    // 刷新后直接从当前用户实例提取详情
    const refreshedUser = auth.currentUser;
    sendResponse({ 
      success: true, 
      user: {
        uid: refreshedUser.uid,
        displayName: refreshedUser.displayName,
        email: refreshedUser.email,
        photoURL: refreshedUser.photoURL
        // 按需添加其他字段
      }
    });
  } catch (err) {
    sendResponse({ success: false, message: err.message });
  }
}

2. 确保服务器端用户数据完整

在生成自定义令牌前,确认服务器端的Firebase用户已配置好所需属性:

  • 创建新用户时直接设置:
// 服务器端代码示例
admin.auth().createUser({
  uid: "custom-user-id",
  email: "user@example.com",
  displayName: "张三",
  photoURL: "https://example.com/avatar.jpg"
})
.then((userRecord) => {
  return admin.auth().createCustomToken(userRecord.uid);
})
.then((customToken) => {
  // 将令牌返回给客户端
});
  • 针对已有用户,先更新信息再生成令牌:
admin.auth().updateUser("existing-user-id", {
  displayName: "更新后的用户名",
  email: "new-email@example.com"
})
.then((userRecord) => {
  return admin.auth().createCustomToken(userRecord.uid);
});

3. 可选:从ID Token提取声明

如果生成自定义令牌时添加了自定义声明,可通过getIdTokenResult()获取额外信息:

async function signinWithToken(data, sendResponse) {
  const { token } = data;
  try {
    const user = await signInWithCustomToken(auth, token);
    const idTokenResult = await user.getIdTokenResult();
    const userDetails = {
      uid: user.uid,
      displayName: user.displayName,
      email: user.email,
      // 提取自定义声明
      role: idTokenResult.claims.role
    };
    sendResponse({ success: true, user: userDetails });
  } catch (err) {
    sendResponse({ success: false, message: err.message });
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:30:59