【问题标题】:How to get Firebase Project Name or ID from Cloud Function如何从 Cloud Function 获取 Firebase 项目名称或 ID
【发布时间】:2017-10-20 01:19:57
【问题描述】:

我正在使用 Cloud Functions 并希望从我的一个 Javascript 服务器文件中获取项目名称。我知道该值存储在 .firebaserc 中,但我认为该文件在服务器上不可用,对吗?我想做这样的事情:

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

admin.getProjectName();  // or getProjectID()

functions.getProjectName(); 

【问题讨论】:

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


【解决方案1】:

谢谢@Frank。答案是: process.env.GCLOUD_PROJECT.
我不确定变量process 来自哪里,但这确实可以获取项目名称。

【讨论】:

【解决方案2】:

Firebase 管理员 SDK 可以为您访问该信息。

const admin = require('firebase-admin');
const projectId = admin.instanceId().app.options.projectId

【讨论】:

【解决方案3】:

这对我有用。 (节点 10)

const FIREBASE_CONFIG = process.env.FIREBASE_CONFIG && JSON.parse(process.env.FIREBASE_CONFIG);
const projectId = FIREBASE_CONFIG.projectId;

【讨论】:

    【解决方案4】:

    试试这个:

    const projectId = admin.instanceId().app['options_'].credential.projectId
    

    【讨论】:

      【解决方案5】:

      对于在较新版本的 Node 上运行的云功能:

      import firestore from "@google-cloud/firestore";
      
      const client = new firestore.v1.FirestoreAdminClient();
      const projectId = await client.getProjectId();
      

      【讨论】:

        【解决方案6】:

        使用 admin SDK 获取项目 ID 的方式是

        admin.appCheck().app.options.credential.projectId
        

        这也适用于设置环境变量 GOOGLE_APPLICATION_CREDENTIALS 的 Docker 等无头设置。

        【讨论】:

          【解决方案7】:

          目前我正在使用app.INTERNAL.credential_.projectId。 这显然不是保存,但到目前为止还没有凝聚力的方法来获得它(AFAIK)

          【讨论】:

            【解决方案8】:

            这是上面给出的答案的组合:

            function getProjectID() {
              return firebaseInstance.options.projectId ||
                (firebaseInstance.options.credential && firebaseInstance.options.credential.projectId) || '';
            }
            

            或者在 TypeScript 中:

            function getProjectID(): string {
              return firebaseInstance.options.projectId ||
                (firebaseInstance.options.credential && (firebaseInstance.options.credential as unknown as { projectId: string }).projectId) || '';
            }
            

            【讨论】:

              【解决方案9】:

              来自the Firebase docs

              process.env.FIREBASE_CONFIG:提供以下 Firebase 项目配置信息:

              {
                databaseURL: 'https://databaseName.firebaseio.com',
                storageBucket: 'projectId.appspot.com',
                projectId: 'projectId'
              }
              

              请注意,由于它是 JSON 字符串,因此您需要像这样解析它:

              const projectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId;
              

              或者,您可以使用 Cloud Functions 中 firebase-functions 包中的 the undocumented firebaseConfig() method,如下所示:

              import { firebaseConfig } from "firebase-functions";
              const projectId = firebaseConfig().projectId;
              

              此外,Google Cloud Platform(Firebase 在其上运行)将根据您使用的运行时自动填充 environment variables documented here

              【讨论】:

                【解决方案10】:

                您可以使用functions.config().firebase.projectId

                PS 初始化应用最简单的方法是admin.initializeApp(functions.config().firebase);

                【讨论】:

                • functions.config().firebase.projectId 没有为我定义。我只在 functions.config().firebase 对象上看到字段:databaseURL、storageBucket、apiKey、authDomain 和 credential。
                • functions.config() 返回用户设置的环境配置,这就是你被否决的原因。
                猜你喜欢
                • 2021-03-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-05
                • 1970-01-01
                • 2018-10-25
                • 2023-02-02
                相关资源
                最近更新 更多