我刚开始使用Firebase并进行一些简单的测试。我在验证方面遇到了麻烦。
以下是一些示例代码:
var Firebase = require("firebase");
var myFirebaseRef = new Firebase("https://familytrial.firebaseio.com/");
myFirebaseRef.child("families").on("value", function(snapshot) {
console.log("Something changed!");
console.log("%j", snapshot.val());
console.log("\n\n\n");
}, function(err) {
console.log("Something failed!");
console.log(err);
});
setTimeout( function() {
myFirebaseRef.child('families').push({
"familyName" : "Jones",
"members" : {
"givenName" : "Jim",
"calledName" : "Koolaid",
"parent" : true
}
}, function(err) {
if(err) {
console.log("\nAn error occurred");
console.log(err);
}
})
}, 3000);
setTimeout( function() {
myFirebaseRef.child('families').push({
"familyName" : "The Jones Have a Ridiculously Long Family Name That Should Get Rejected",
"members" : {
"givenName" : "Jim",
"calledName" : "Koolaid",
"parent" : true
}
}, function(err) {
if(err) {
console.log("\nAn error occurred");
console.log(err);
}
})
}, 3000);
当验证为:
时,此代码可以正常工作{
"rules": {
".read" : true,
".write" : true
}
}
但是,当我尝试验证家庭中的任何内容时,我会收到权限错误,或者验证似乎不会限制输入。
{
"rules": {
".write": true,
".read": true,
"families": {
"familyName": {
".validate": "newData.isString() && newData.val().length < 50"
}
}
}
}
我希望验证规则允许第一次推送到“家庭”并拒绝第二次。但是,它同时接受推送。
我在验证时做错了什么?
谢谢, 贾斯汀
答案 0 :(得分:3)
@Kato提到了答案。这是完整的解释。
我正在尝试创建families
对象的成员。像这样:
{"familyName":"Jones","members":{"givenName":"Jim","calledName":"Koolaid","parent":true}}
所以,这将创建一个像:
这样的结构{
"families": {
"some_object_id": {
"familyName": "Jones",
"members": {
"givenName": "Jim",
"calledName": "Koolaid",
"parent": true
}
}
}
}
但是,我的验证规则是验证familyname
对象上的families
属性。
那个验证规则对于这样的事情会很有用:
{
"families": {
"familyName": "Jones"
}
}
这不是我想要的。我的正确验证,需要像这样:
{
"rules": {
".read": false,
".write": false,
"families": {
".read": true,
"$families_id": {
".write": "!data.exists() && newData.exists()",
"familyName": {
".validate": "newData.isString() && newData.val().length > 1 && newData.val().length < 50"
}
}
}
}
}