如何通过 Firebase Cloud Functions 上的 .firebaserc 切换到另一个 serviceAccountKey.json?

Posted

技术标签:

【中文标题】如何通过 Firebase Cloud Functions 上的 .firebaserc 切换到另一个 serviceAccountKey.json?【英文标题】:How do I switch to another serviceAccountKey.json via .firebaserc on Firebase Cloud Functions? 【发布时间】:2018-09-29 13:15:45 【问题描述】:

在我的 .firebaserc 文件中,我提供了两个 Firebase 数据库,一个用于开发,一个用于生产:


  "projects": 
    "default": "db-dev",
    "production": "db-prod"
  

所以当我部署到生产环境时,我会运行:

firebase use production
firebase deploy --only functions

我的问题是我也在我的一个云功能中使用云存储,所以我将在这里使用两个不同的serviceAccountKey.json 文件:

const gcs = require('@google-cloud/storage')( keyFilename: 'serviceAccountKey.json' )

我的问题是当我通过firebase use切换到另一个数据库时,如何自动切换到另一个serviceAccountKey.json

【问题讨论】:

【参考方案1】:

firebase use 无法像这样自动执行任何操作。它只是将一个 Firebase 项目附加到您的本地项目文件夹中。它只是为您管理.firebaserc

您将不得不找到另一种方法来完成这项工作。也许编写一个脚本来管理凭据和firebase use

【讨论】:

明白。我将添加一个脚本到我的package.json【参考方案2】:

每个 Firebase 项目都有自己的 Environment Configuration。解决方案是将服务帐户密钥存储在那里。

为每个 Firebase 项目设置服务帐号密钥:

firebase use default
firebase functions:config:set admin.key="serviceAccountKey-dev.json"

firebase use production
firebase functions:config:set admin.key="serviceAccountKey-prod.json" 

环境配置将通过functions.config()获得:

const functions = require('firebase-functions')
const gcs = require('@google-cloud/storage')( 
  keyFilename: functions.config().admin.key 
)
 

【讨论】:

注意:运行 functions:config:set 后,您必须重新部署函数以使新配置在 Firebase 中可用。 this answer 还展示了在本地测试云函数时如何使用functions.confg()

以上是关于如何通过 Firebase Cloud Functions 上的 .firebaserc 切换到另一个 serviceAccountKey.json?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firebase Cloud Functions 中确认 PubSub 消息?

Flutter Firebase Cloud Messaging 如何自动关闭/取消通知?

Cloud Firestore 安全规则只允许从 Firebase 函数写入

如何在 Firebase Cloud 函数中调用导出的 https Firebase Cloud 函数?

如何使用 ionic 3 和 Firebase Cloud Messaging 从通知栏打开特定页面?

尝试通过 Firebase Cloud Functions (Android) 发送通知后出现错误