使用空参数、admin.credential.applicationDefault() 和服务帐户凭据通过 fireba



考虑Firebase Cloud Function Node.js环境,其方式如下:

选项 #1

admin.initializeApp()

与此不同:

选项 #2

admin.initializeApp({
credential: admin.credential.applicationDefault()
});

或者这个:

选项 #3

admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});

它们似乎都可以在写入受保护集合的云函数中正常工作,如下所示:

match /productsAll/{documentID} {
allow read;
allow write: if request.auth.token.admin == true;
}

以下信息基于发布时的firebase-admin-node@8.9.0,当前Node.js SDK:

所使用的凭据而言,选项1 和选项 2在功能上是相同的。

每当FirebaseAppOptions对象(第一个参数(没有'credential'属性时,它就会设置为getApplicationDefault(...),与admin.credential.applicationDefault()方法中使用的属性相同。这是您运行代码的 Google/Firebase 执行环境提供的凭据。

但是,在选项 1 中,Firebase 配置变量(databaseURLdatabaseAuthVariableOverrideprojectId等(都是使用环境变量FIREBASE_CONFIG填充的,而在选项2选项 3中,它们必须由您的代码显式设置。

FIREBASE_CONFIG环境变量是 JSON 字符串或文件的路径。在 Firebase Cloud Functions 环境或本地服务的项目中,此环境变量会填充相关 Firebase 项目的配置。

最后,选项 3允许您配置自己的服务帐户以用于您的管理 SDK 实例。您可以使用它来缩小您的管理 SDK 拥有的访问权限 - 例如只能访问 Cloud Firestore 而不是 Cloud Storage。这在处理具有单一用途 (admin.initializeApp({...}, 'some-named-instance')( 的辅助管理 SDK 实例时特别有用。当您希望在测试环境中而不是在生产数据库上运行代码时,也可以使用它。它还允许您将更多范围添加到其他 Google 拥有的服务(例如 Gmail 和 Google 文档(的服务帐户中,以简化您的实施。

最新更新