【发布时间】:2017-09-24 10:13:32
【问题描述】:
根据Allowing write access only to Cloud Functions for Firebase,为了为数据库规则设置用户 uid 和其他身份验证信息,您的函数应该是这样的:
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的正确方法吗?或者是否有(未)记录的函数 uid 或其他方式来设置仅允许从云函数写入的规则?
更新 - 已解决
我们解决了这个问题,问题是(我猜)引用的答案是 Google Cloud Functions 并且我们正在为 Firebase 编写 Cloud Functions。 p>
在 Cloud Functions for Firebase 中,event.data 是一个具有ref 和adminRef 属性的DeltaSnapshot 对象。 ref 具有与触发事件的用户相同的访问权限,而 adminRef 具有不受限制的读/写权限。因此,为了只允许函数写入路径,必须在规则中拒绝写入操作,并且函数必须使用adminRef 写入。
感谢答案,这已解决 给Some Firebase security rules apply for admin in Cloud Functions 和Google documentation for DeltaSnapshot。
【问题讨论】:
标签: firebase firebase-realtime-database google-cloud-functions