如何从 Cloud Function 获取 Firebase 项目名称或 ID
Posted
技术标签:
【中文标题】如何从 Cloud Function 获取 Firebase 项目名称或 ID【英文标题】:How to get Firebase Project Name or ID from Cloud Function 【发布时间】: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();
【问题讨论】:
在firebase-samples repo 上的快速搜索似乎暗示了process.env.GCLOUD_PROJECT
您还可以将自己的配置值填充到您的 Cloud Functions 环境中。 firebase.google.com/docs/functions/config-env
【参考方案1】:
谢谢@Frank。答案是:
process.env.GCLOUD_PROJECT
.
我不确定变量process
来自哪里,但这确实可以获取项目名称。
【讨论】:
进程是节点中的全局对象。见:nodejs.org/api/globals.html#globals_process 似乎不适用于 GCF Node 10 运行时。转储时看不到process.env
现在使用process.env.GCP_PROJECT
可能会更好,因为GCLOUD_PROJECT
已在此处标记为已弃用:cloud.google.com/functions/docs/…
GCLOUD_PROJECT 和 GCP_PROJECT 在 Node 10 运行时都不可用。
GCLOUD_PROJECT
现在似乎可以工作了,它也已在 node10
运行时中修复 github.com/firebase/firebase-functions/issues/437【参考方案2】:
Firebase 管理员 SDK 可以为您访问该信息。
const admin = require('firebase-admin');
const projectId = admin.instanceId().app.options.projectId
【讨论】:
这可能不存在,具体取决于 admin 的初始化方式 admin.instanceId() 已弃用 firebase.google.com/docs/reference/admin/node/…【参考方案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()
返回用户设置的环境配置,这就是你被否决的原因。以上是关于如何从 Cloud Function 获取 Firebase 项目名称或 ID的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Cloud Function with Flutter 从新图像中获取 URL?
从请求中获取用户信息到 Firebase 中的 Cloud Function
Cloud Function 构建错误 - 无法从配置文件获取映像的操作系统
如何在 Google Cloud Function 上的 Spring Cloud 函数中获取 Pub/Sub 事件的元数据