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

如何让调用Firebase admin.auth().getUser()的函数返回正确用户邮箱?

解决Firebase Admin API获取用户邮箱返回undefined的问题

原函数的核心问题是:admin.auth().getUser(uid)是异步操作,返回Promise,但你的getEmail函数没有返回这个Promise,而且内部then回调里的return只是回调函数的返回值,不会成为getEmail的返回值,所以调用时自然拿到undefined。

下面给两种可行的修改方案:

方案一:使用async/await(更直观)

把getEmail声明为async函数,用await等待异步操作完成,同时用try/catch处理错误:

async function getEmail(uid) {
  try {
    // 等待getUser完成,拿到用户记录
    const userRecord = await admin.auth().getUser(uid);
    // 返回邮箱
    return userRecord.email;
  } catch (error) {
    console.log('Error fetching user data:', error);
    // 可选:返回默认值或抛出错误,这里返回null表示获取失败
    return null;
  }
}

调用时,因为getEmail现在返回Promise,所以必须用await(在async函数内)或者.then处理:

// 在async函数内调用
async function useEmail(uid) {
  const email = await getEmail(uid);
  // 这里可以使用email
}

// 或者用.then链式调用
getEmail(uid).then(email => {
  // 这里使用email
});

方案二:直接返回Promise链

如果你不想用async/await,也可以让getEmail直接返回getUser的Promise链:

function getEmail(uid) {
  return admin.auth().getUser(uid)
    .then(userRecord => userRecord.email)
    .catch(error => {
      console.log('Error fetching user data:', error);
      return null;
    });
}

调用方式和方案一完全一致,同样需要用await或.then来获取最终的邮箱值。

关键提醒

不管用哪种方案,调用getEmail的地方都必须处理异步逻辑——要么在async函数里用await,要么用.then,不能直接赋值email = getEmail(uid),因为这样拿到的是Promise对象,不是最终的邮箱字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:05:25