Javascript 用户匿名登录的Firebase规则

Javascript 用户匿名登录的Firebase规则,javascript,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Javascript,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,我在Firebase上的数据应该只能在我的网页上下文中读取,而不能(例如)通过打开Firebase URL来读取 对于尚未注册的用户,我使用signinanoymously(),这会给他们一个user.uid,但他们看起来仍然没有经过身份验证。因此,规则“.read”:“auth!=null”会导致这些用户的权限被拒绝,即使他们有用户对象 以下是我的JavaScript: $(文档).ready(函数(){ 变量配置={ apiKey:“, authDomain:“.firebaseapp.co

我在Firebase上的数据应该只能在我的网页上下文中读取,而不能(例如)通过打开Firebase URL来读取

对于尚未注册的用户,我使用signinanoymously(),这会给他们一个user.uid,但他们看起来仍然没有经过身份验证。因此,规则
“.read”:“auth!=null”
会导致这些用户的权限被拒绝,即使他们有用户对象

以下是我的JavaScript:

$(文档).ready(函数(){
变量配置={
apiKey:“,
authDomain:“.firebaseapp.com”,
数据库URL:“https://.firebaseio.com",
storageBucket:“.appspot.com”
};
firebase.initializeApp(配置);
firebase.auth().onAuthStateChanged(函数(用户){
if(user){}else{
firebase.auth();
}
});
var ref=新的火基(“https://.firebaseio.com/offices/some_office");
参考“值”,功能(快照){
var name=snapshot.child(“title”).val();
console.log(snapshot.val());
},函数(errorObject){
log(“读取失败:+errorObject.code”);
});
});
以及相应的规则:

“办公室”:{
“$office_id”:{
“.read”:“auth!=null”,
.write:“auth!=null”
}
},
当我将“读取”权限更改为true时,它会起作用


我可以使用什么规则只允许登录的匿名用户(和注册的登录用户)读取我的数据?

在用户登录之前,您的代码正在附加侦听器。Firebase数据库服务器在侦听器首次连接时会立即检查权限,因此会立即拒绝未经授权的侦听

解决方案是在连接侦听器之前等待用户通过身份验证:

$(document).ready(function () {
    var config = {
        apiKey: "<my api key>",
        authDomain: "<my firebase>.firebaseapp.com",
        databaseURL: "https://<my firebase>.firebaseio.com",
        storageBucket: "<my firebase>.appspot.com"
    };
    firebase.initializeApp(config);
    firebase.auth().onAuthStateChanged(function (user) {
        if (user) {
            var ref = new Firebase("https://<my firebase>.firebaseio.com/offices/some_office");
            ref.on("value", function (snapshot) {
                var name = snapshot.child("title").val();
                console.log(snapshot.val());
            }, function (errorObject) {
                console.log("The read failed: " + errorObject.code);
            });
        } else {
            firebase.auth().signInAnonymously();
        }
    });
});
$(文档).ready(函数(){
变量配置={
apiKey:“,
authDomain:“.firebaseapp.com”,
数据库URL:“https://.firebaseio.com",
storageBucket:“.appspot.com”
};
firebase.initializeApp(配置);
firebase.auth().onAuthStateChanged(函数(用户){
如果(用户){
var ref=新的火基(“https://.firebaseio.com/offices/some_office");
参考“值”,功能(快照){
var name=snapshot.child(“title”).val();
console.log(snapshot.val());
},函数(errorObject){
log(“读取失败:+errorObject.code”);
});
}否则{
firebase.auth();
}
});
});

顺便说一句:我强烈建议您也将Firebase数据库的代码更新到3.x版。

匿名身份验证的用户就是经过身份验证的用户。如果这对你不起作用,请提供答案。这是有希望的,谢谢弗兰克。编辑以显示代码。由于我的邪恶版本混合,无法按上述方式工作。我仍然需要将
newfirebase
调用更改为
Firebase.database().ref()
。谢谢你,弗兰克!