获取或设置Firebase uid的云功能,以便在数据库规则中使用

时间:2017-04-26 20:22:32

标签: firebase firebase-realtime-database google-cloud-functions

根据Allowing write access only to Cloud Functions for Firebase为了设置数据库规则的用户uid和其他auth信息,你的功能应该是这样的:

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

exports.foo = functions.database.ref('/bar')
    .onWrite(event => {
  var firebaseConfig = functions.config().firebase;
  firebaseConfig.databaseAuthVariableOverride = {
    uid: 'some-uid',
    foo: true,
    bar: false
  };
  admin.initializeApp(firebaseConfig);
  ...
}

但是当我们在函数中运行此代码时,会出现以下错误:

The default Firebase app already exists. This means you called initializeApp() more than once without providing an app name as the second argument. In most cases you only need to call initializeApp() once. But if you do want to initialize multiple apps, pass a second argument to initializeApp() to give each app a unique name.

这个代码有什么问题?这是设置uid的正确方法吗?或者是否有(un)文档的uid用于函数或其他方式来设置只允许从云函数写入的规则?

更新 - 已解决

我们解决了这个问题,问题是 Google Cloud Functions 引用的答案是(我猜),我们正在为Firebase编写云功能

在适用于Firebase的Cloud Functions中,event.data DeltaSnapshot 对象,具有refadminRef属性。 ref具有与触发事件的用户相同的访问权限,而adminRef具有不受限制的读/写权限。因此,为了只允许函数写入路径,必须在规则中拒绝写入操作,并且函数必须使用adminRef进行写入。

由于答案,这已得到解决 给予Some Firebase security rules apply for admin in Cloud FunctionsGoogle documentation for DeltaSnapshot

1 个答案:

答案 0 :(得分:1)

我们解决了这个问题,问题是 Google Cloud Functions 引用的答案是(我猜),我们正在编写 Firebase功能

在Firebase中,event.data DeltaSnapshot 对象,具有refadminRef属性。 ref具有与触发事件的用户相同的访问权限,而adminRef具有不受限制的读/写权限。因此,为了只允许函数写入路径,必须在规则中拒绝写入操作,并且函数必须使用adminRef进行写入。

由于答案,这已得到解决 给予Some Firebase security rules apply for admin in Cloud FunctionsGoogle documentation for DeltaSnapshot

相关问题