2017-04-26 31 views
1

据以设定用户的UID和数据库等身份验证信息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或其他方式来设置一个规则,只允许从云功能写入?

更新 - 解决

我们拿到的这款解决了,问题是,参考答案是(我猜)为谷歌云功能,我们正在编写一个云功能的火力地堡

在用于火力地堡云功能,event.dataDeltaSnapshot对象具有refadminRef性质。 ref与触发事件的用户具有相同的访问权限,而adminRef具有不受限制的读/写权限。因此,为了仅允许函数写入路径,必须在规则中拒绝写入操作,并且函数必须使用adminRef来写入。

由于对Some Firebase security rules apply for admin in Cloud FunctionsGoogle documentation for DeltaSnapshot给出的回答 解决了这个问题。

回答

1

我们拿到的这款解决了,问题是,参考答案是(我猜)为谷歌云功能,我们正在编写一个火力地堡功能

在火力地堡功能event.dataDeltaSnapshot对象具有refadminRef性质。 ref与触发事件的用户具有相同的访问权限,而adminRef具有不受限制的读/写权限。因此,为了仅允许函数写入路径,必须在规则中拒绝写入操作,并且函数必须使用adminRef来写入。

由于对Some Firebase security rules apply for admin in Cloud FunctionsGoogle documentation for DeltaSnapshot给出的回答 解决了这个问题。