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

Sam*_*mmy 3 firebase google-cloud-functions firebase-admin

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

我在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'
});
Run Code Online (Sandbox Code Playgroud)

还有这个

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);
Run Code Online (Sandbox Code Playgroud)

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

Dou*_*son 5

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

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

const admin = require('firebase-admin');
admin.initializeApp();   // accept the default service account
Run Code Online (Sandbox Code Playgroud)

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

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

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