云功能上的管理 SDK 是否需要 firebase sevices.json

Is firebase sevices.json needed for admin SDK on cloud functions

我正在尝试编写一个函数,当用户写入默认数据库时写入不同的数据库, 我做了我的研究,我有点困惑

我在 firebase 上看到了这个

var admin = require('firebase-admin');

var serviceAccount = 
require('path/to/serviceAccountKey.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
databaseURL: 
'https://<DATABASE_NAME>.firebaseio.com'
});

还有这个

const app1 = firebase.initializeApp({
databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = firebase.initializeApp({
databaseURL: "https://testapp-1234-2.firebaseio.com"
 }, 'app2');

 // Get the default database instance for an app1
 var database1 = firebase.database();

// Get a database instance for app2
var database1 = firebase.database(app2);

所以我的问题是,在使用云功能管理 SDK 时,我们是否需要 service.json 保存密钥的文件

对于几乎所有典型用例,在 Cloud Functions 中使用 Firebase Admin SDK 时,您无需提供服务帐户。这是因为 Cloud Functions 为部署该函数的项目中的默认服务帐户提供了凭据。 (该账号可以看作是云控制台中的App Engine默认服务账号。)

强烈建议不带参数初始化 Admin SDK 并接受此默认帐户:

const admin = require('firebase-admin');
admin.initializeApp();   // accept the default service account

作为采用此默认设置的一部分,Admin SDK 还将了解您的默认实时数据库分片的 URL 和默认云存储存储桶的 URL。您不需要提供这些值。因此,您的代码将更容易移植到其他项目。

如果您需要访问项目的非默认资源,您还可以初始化 firebase-admin 的其他实例以指向您明确配置的资源。这就是您的第二个代码示例所说明的内容。如果您没有任何非默认资源可以访问,那么请不要为此烦恼。

如果服务帐户可以执行某些操作,您可以在云控制台中授予该角色。默认情况下,此帐户目前无法执行的一项值得注意的操作是对 blob 进行加密签名。实际上,这意味着它无法为存储在 Cloud Storage 中的对象生成 signed URLs。这是 Cloud Functions 中相当常见的事情。要解决此问题,您需要将 signBlob 角色授予默认服务帐户。