【问题标题】:Firebase Functions Service Accounts with Two Projects具有两个项目的 Firebase Functions 服务帐户
【发布时间】:2021-07-09 14:41:03
【问题描述】:

我有两个 firebase 项目,一个用于生产,一个用于开发。我已经为这两个项目创建了服务帐户密钥,并在我的函数文件夹中初始化了 admin,如下所示:

const admin = require("firebase-admin");
const serviceAccount = require("./service-account.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  storageBucket: "some-app.appspot.com",
});
const db = admin.firestore();

module.exports = {
  db,
  admin,
};

但我需要 firebase 为每个项目使用适当的服务帐户。我的应用设置为在生产中部署时使用生产项目,但我设置 admin.js(上图)的方式总是需要开发服务帐户凭据。

如何将服务帐户凭据设置为环境变量?有没有办法在控制台中将密钥添加到 firebase 配置?还是我应该在生产服务帐户中硬编码并接受它?

我在docs 中找到了这个,但它似乎不能解决我的问题。

serviceAccount = require('./serviceAccount.json');

const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(serviceAccount);
admin.initializeApp(adminConfig);

感谢您提供的任何帮助。

【问题讨论】:

  • 我不清楚您所说的“我需要 firebase 为每个项目使用适当的服务帐户”是什么意思。服务帐户旨在供您在自己的后端代码中使用,以访问某些 Firebase 和 Google Cloud 产品。您无需在控制台中配置它们,您只需在控制台中生成它们并在您的代码中使用它们。我建议编辑您的问题,以便更清楚您想要实现的具体目标或未按您预期的方式工作。
  • 谢谢,道格。已编辑。这一点: const serviceAccount = require("./service-account.json");是我的开发服务帐户。从生产中调用函数时,我需要拉入 prod 服务帐户。有没有办法让它成为环境变量?希望这是有道理的。
  • 我不建议你遵循我的技术。但是你可以尝试这样的事情我试过in this project

标签: node.js firebase google-cloud-functions


【解决方案1】:

您可以指定要在环境变量中使用的配置,如 here 所示,然后在您的代码中选择它。

但是这在大多数情况下是不必要的,因为在不带参数的情况下调用 admin.initializeApp() 已经使用当前项目的管理凭据初始化了 Admin SDK。 p>

【讨论】:

  • 谢谢,弗兰克。调用不带参数的 admin.initializeApp() 就可以了。
猜你喜欢
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2019-03-24
  • 2017-07-22
相关资源
最近更新 更多