Javascript 用户匿名登录的Firebase规则
我在Firebase上的数据应该只能在我的网页上下文中读取,而不能(例如)通过打开Firebase URL来读取 对于尚未注册的用户,我使用signinanoymously(),这会给他们一个user.uid,但他们看起来仍然没有经过身份验证。因此,规则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
“.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()
。谢谢你,弗兰克!