Firebase读取权限
因此,我设置了一个简单的db/web表单来收集一些用户数据。Rn我试图找出规则,但我遇到了这个问题-如果我的read标志设置为true,那么我可以简单地在控制台中运行它Firebase读取权限,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,因此,我设置了一个简单的db/web表单来收集一些用户数据。Rn我试图找出规则,但我遇到了这个问题-如果我的read标志设置为true,那么我可以简单地在控制台中运行它 var ref = firebase.database().ref(); ref.on("value", function(snapshot) { console.log(snapshot.val()); }, function (error) { console.log("Error: " + error.cod
var ref = firebase.database().ref();
ref.on("value", function(snapshot) {
console.log(snapshot.val());
}, function (error) {
console.log("Error: " + error.code);
});
并暴露出用户不应有的可能性。如果我将read设置为false,则我无法预先访问DB以验证电子邮件地址是否唯一。我想我需要实现两件事:
防止数据库窥探运行任何代码段的开发工具
确保电子邮件地址是唯一的。
p、 s.我当前的规则阻止删除、阻止读取,确保POST请求具有特定字段:
{
"rules": {
"users": {
".read": false,
"$uid": {
".write": "!data.exists()",
".validate": "newData.hasChildren(['first_name', 'last_name', 'email', 'country', 'amount'])"
}
}
}
}
为了避免重复,您需要在DB中进行验证检查,而不是从客户机读取数据并检查您不能信任客户机 由于没有简单的方法来检查firebase集合中是否存在重复的子值,因此您需要一个单独的集合来跟踪电子邮件,然后根据该子值验证您的电子邮件,即:
{
"rules": {
"users": {
".read": false,
"$uid": {
".write": "!data.exists()",
".validate": "newData.hasChildren(['first_name', 'last_name', 'email', 'country', 'amount'])",
"email": {
".validate": "!root.child('emails').child(newData.val()).exists()"
}
}
},
"emails": {
".read": false,
".write": "!data.exists()"
}
}
}
然后,在添加用户时,您需要将用户的电子邮件写入电子邮件集合,例如:
var ref = firebase.database().ref('emails/'+email);
ref.set(uid)