根据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 对象,具有ref
和adminRef
属性。 ref
具有与触发事件的用户相同的访问权限,而adminRef
具有不受限制的读/写权限。因此,为了只允许函数写入路径,必须在规则中拒绝写入操作,并且函数必须使用adminRef
进行写入。
由于答案,这已得到解决 给予Some Firebase security rules apply for admin in Cloud Functions和Google documentation for DeltaSnapshot。
答案 0 :(得分:1)
我们解决了这个问题,问题是 Google Cloud Functions 引用的答案是(我猜),我们正在编写 Firebase功能。
在Firebase中,event.data
是 DeltaSnapshot 对象,具有ref
和adminRef
属性。 ref
具有与触发事件的用户相同的访问权限,而adminRef
具有不受限制的读/写权限。因此,为了只允许函数写入路径,必须在规则中拒绝写入操作,并且函数必须使用adminRef
进行写入。
由于答案,这已得到解决 给予Some Firebase security rules apply for admin in Cloud Functions和Google documentation for DeltaSnapshot。