仅允许对Firebase的云功能进行写访问

时间:2017-03-22 17:15:16

标签: node.js firebase google-cloud-functions firebase-admin

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

修改 相反,为此启动证书是一个好主意吗?即

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

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

1 个答案:

答案 0 :(得分:11)

通常,在云端功能代码的顶部,您有:

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

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

您可以将databaseAuthVariableOverride添加到此对象limit the Admin SDK's privileges。你可以只覆盖对象本身:

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);