【问题标题】:Firebase admin looking for a different default project than the one I'm currently working on my local environmentFirebase 管理员正在寻找与我目前在本地环境中工作的默认项目不同的默认项目
【发布时间】:2020-03-13 13:24:25
【问题描述】:

我正在本地环境中构建此云功能,我需要将一些内容保存到 Firestore:

这是我初始化firebase-admin 应用程序的方式:

myFunction.js

if (!adminHasInitialized) {
  console.log("INITIALIZING ADMIN APP");                    // THIS IS BEING LOGGED
  admin.initializeApp({
    credential: admin.credential.applicationDefault(),
  });
  adminHasInitialized = true;
}

以下是我尝试更新 Firestore 的方式:

await admin.firestore().collection("myCollection").doc("myDoc").update({
  ...
});

注意:我正在处理MY_PROJECT_1

这是我得到的错误:

details: '没有要更新的文档:projects/MY_PROJECT_2/databases/(default)/documents/myCollection/myDoc',

问题

不知何故,firebase-admin 正在另一个数据库中查找我拥有的另一个项目 MY_PROJECT_2

当我运行时:firebase projects:list,这是我得到的:

Project Display Name   │ Project ID                  │ Resource Location ID
MY_PROJECT_1           │ MY_PROJECT_1 (current)      │ us-central1
MY_PROJECT_2           │ MY_PROJECT_2                │ us-central1

所以当前项目是正确的。

我也有这个文件,我将其默认设置为 MY_PROJECT_1

.firebaserc

{
  "projects": {
    "default": "MY_PROJECT_1"
  }
}

我还尝试在初始化应用程序时添加 DB URL,如下所示:

admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: "https://MY_PROJECT_1.firebaseio.com"
});

但我不断收到同样的错误。

注意:我正在本地环境中使用babel-node 通过以下命令运行此功能:

npx babel-node functions/src/myFunction.js


问题

firebase-admin 如何获得与我目前正在处理的项目不同的默认项目?


更新 1

我认为 firebase-admin 正在从我的 PC 中安装的 gcloud SDK 获取默认配置。

发件人:

[C:\Users\USER\AppData\Roaming\gcloud\configurations\config_default]

config_default:

[core]
account = my@email.com
project = MY_PROJECT_2     // MAYBE IT IS COMING FROM HERE

更新 2

到目前为止,我唯一能做到的就是:

admin.initializeApp({
  projectId: "MY_PROJECT_1",
  databaseURL: "https://MY_PROJECT_1.firebaseio.com"
});

当我在本地运行此功能时,这为我提供了正确的项目。

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions firebase-admin


    【解决方案1】:

    从 Firebase SDK for Cloud Functions 1.0.0 版开始,您不再需要使用 admin.initializeApp(functions.config().firebase); 进行初始化,请参阅文档 here,其中解释了:

    firebase-admin 现在在没有任何参数的情况下被初始化 Cloud Functions 运行时。

    所以请尝试:

    if (!adminHasInitialized) {
      console.log("INITIALIZING ADMIN APP");                   
      admin.initializeApp();
      adminHasInitialized = true;
    }
    

    【讨论】:

    • 嗨雷诺!谢谢你的帮助。但我没有用admin.initializeApp(functions.config().firebase); 初始化它。我只是传递AppOptions 对象。当我做admin.initializeApp(); 时,我仍然得到另一个项目。我认为不知何故 firebase-admin 正在从我当前安装的 gcloud SDK 获取默认项目。
    • 您好,您应该在 Firebase 项目中配置值后尝试使用JSON.parse(process.env.FIREBASE_CONFIG);,请参阅doc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    相关资源
    最近更新 更多