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

Heroku部署Node.js应用遇Firebase无效凭证/ENAMETOOLONG错误求助

错误根因

Firebase Admin SDK 的 cert() 方法支持两类入参:

  • 本地服务账号JSON文件的路径字符串
  • 直接传入解析完成的服务账号配置JS对象

你的代码中将拼接好的配置对象通过JSON.stringify()转成了长字符串,SDK会误认为这是文件路径尝试读取,才会抛出ENAMETOOLONG: name too long的文件名过长错误。

修复后代码

const fireBaseAdmin = require('firebase-admin');

// 原判断逻辑错误,require引入的firebase-admin只要依赖安装正常就不会为空,改为校验必要环境变量
const requiredEnvVars = [
  'FIREBASE_TYPE', 'FIREBASE_PROJECT_ID', 'FIREBASE_PRIVATE_KEY_ID',
  'FIREBASE_PRIVATE_KEY', 'FIREBASE_CLIENT_EMAIL', 'FIREBASE_CLIENT_ID',
  'FIREBASE_AUTH_URI', 'FIREBASE_TOKEN_URI', 'FIREBASE_AUTH_PROVIDER',
  'FIREBASE_CLIENT'
];
const missingVars = requiredEnvVars.filter(varName => !process.env[varName]);
if (missingVars.length > 0) {
  throw new Error(`缺失必要环境变量: ${missingVars.join(', ')}`);
}

fireBaseAdmin.initializeApp({
  // 去掉JSON.stringify,直接传入JS对象即可
  credential: fireBaseAdmin.credential.cert({
    type: process.env.FIREBASE_TYPE,
    project_id: process.env.FIREBASE_PROJECT_ID,
    private_key_id: process.env.FIREBASE_PRIVATE_KEY_ID,
    private_key: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'),
    client_email: process.env.FIREBASE_CLIENT_EMAIL,
    client_id: process.env.FIREBASE_CLIENT_ID,
    auth_uri: process.env.FIREBASE_AUTH_URI,
    token_uri: process.env.FIREBASE_TOKEN_URI,
    auth_provider_x509_cert_url: process.env.FIREBASE_AUTH_PROVIDER,
    client_x509_cert_url: process.env.FIREBASE_CLIENT
  })
});

module.exports = fireBaseAdmin;

额外检查项

  1. 检查Heroku Config Vars中FIREBASE_AUTH_PROVIDER的值,错误日志里该字段值为ttps://www.googleapis.com/oauth2/v1/certs,缺失了开头的h,会导致后续鉴权失败。
  2. 确认FIREBASE_PRIVATE_KEY在Heroku配置中没有额外包裹引号,直接粘贴原始私钥内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 05:09:01