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
相关产品推荐
相关产品推荐

