6

我们如何通过仅允许 Cloud Functions for Firebase 将数据写入某些位置的规则来保护数据库,以前有一个选项可以将 uid 添加到管理客户端并在规则部分使用该 uid,但现在我们databaseAuthVariableOverride通过初始化admin.initializeApp(functions.config().firebase);不确定如何添加其他参数。

编辑 为此使用证书启动是个好主意吗?IE

admin.initializeApp({
  credential: admin.credential.cert("/path-to-cert"),
  databaseURL: "database-url",
  databaseAuthVariableOverride: { uid: "some-id" }
});

上面有什么好处admin.initializeApp(functions.config().firebase)以及实际从哪里functions.config()获取数据,这不只是一个节点模块吗?

4

1 回答 1

12

通常,在 Cloud Functions 代码的顶部,您有:

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

作为firebase-functions节点模块的一部分,您可以访问functions.config().firebase一个对象,该对象包含初始化 Admin SDK 所需的一切,包括您的数据库 URL 和凭证实现(基于应用程序默认凭证)。如果您console.log(functions.config().firebase)在您的代码中,您会看到它只是一个具有这些属性的对象以及您可能希望在代码中使用的其他一些属性。

您可以添加databaseAuthVariableOverride到此对象以限制 Admin SDK 的权限。您可以只覆盖对象本身:

var firebaseConfig = functions.config().firebase;
firebaseConfig.databaseAuthVariableOverride = {
  uid: 'some-uid',
  foo: true,
  bar: false
};
admin.initializeApp(firebaseConfig);

或者您可以使用类似Object.assign()将相关详细信息复制到新对象的方法:

var firebaseConfig = Object.assign({}, functions.config().firebase, {
  databaseAuthVariableOverride: {
    uid: 'some-uid',
    foo: true,
    bar: false
  }
});
admin.initializeApp(firebaseConfig);
于 2017-03-22T18:09:27.570 回答