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

Node.js中调用Firebase Auth获取用户信息的代码异常及需求实现问题

解决你的认证信息获取问题:退出异常 + 虚拟对象返回

我来帮你搞定这两个核心问题,先拆解下你的代码和需求,咱们一步步来修复:

问题1:未认证手机号无法返回虚拟对象

你写了两个同名的getAuth函数,第二个直接覆盖了第一个,而且错误判断逻辑也有问题——认证SDK抛出的错误一般是Error对象,不是纯字符串,得通过error.code来匹配错误类型,而不是直接对比error本身。

修正后的getAuth函数如下:

const getAuth = async (phoneNumber) => {
  try {
    // 调用SDK获取用户认证信息
    return await authGrowthfile.getUserByPhoneNumber(phoneNumber);
  } catch (error) {
    // 精准匹配「用户未找到」的错误码
    if (error.code === 'auth/user-not-found') {
      console.log(`手机号 ${phoneNumber} 无认证信息`);
      // 返回你需要的虚拟用户对象
      return {
        phoneNumber,
        uid: null,
        email: '',
        displayName: '',
        emailVerified: false,
        disabled: false,
      };
    }
    // 其他错误重新抛出,避免掩盖真实问题(比如网络异常、SDK配置错误)
    throw new Error(`获取 ${phoneNumber} 信息失败: ${error.message}`);
  }
};

问题2:获取结果后代码无法退出

这通常是因为你的认证SDK(比如authGrowthfile)在初始化后保持了后台连接,导致Node.js的事件循环一直处于活跃状态,无法自动终止。解决办法是在所有请求完成后,主动关闭SDK的客户端连接。

完整的调用流程要加上关闭步骤:

const phoneNumberArray = ['+918888','+91798299'];

async function fetchUserRecords() {
  try {
    const userRecords = await Promise.all(phoneNumberArray.map(getAuth));
    console.log('所有用户信息获取完成:', userRecords);
    
    // 关键操作:获取完数据后关闭SDK客户端(方法名根据你的SDK文档调整)
    await authGrowthfile.close();
  } catch (error) {
    console.error('获取用户信息出错:', error);
    // 出错时也要关闭客户端再退出,避免资源泄漏
    await authGrowthfile.close().catch(() => {});
    process.exit(1);
  }
}

// 执行主函数
fetchUserRecords();

额外小提示

  • 不要定义同名函数,后面的会直接覆盖前面的逻辑,这也是你之前虚拟对象没生效的原因之一;
  • 优先使用SDK提供的close方法终止连接,尽量不用process.exit()强制退出,后者可能导致资源未正确释放;
  • 错误处理要精准,别捕获所有错误就返回虚拟对象,否则会掩盖网络异常、SDK配置错误这类真实问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:57:46