我正在使用React和Firebase做一个简单的图书管理器应用程序。用户可以输入书的作者,书名和等级,而我正在尝试验证输入内容。
数据的结构如下:
"books" : {
"-LSon2JjuqUWb6tXV-EA" : {
"author" : "Stephen King",
"rating" : "5",
"title" : "\"Misery\""
},
"-LSp33lP1b5W2XOXyEmI" : {
"author" : "Stephen King",
"rating" : "10",
"title" : "\"Cujo\""
}
}
每个键是由Firebase在调用push方法时以编程方式生成的。 现在,我想验证用户的输入,但是密钥似乎引起了问题。我在报表中应如何提及?还是有完全不同的原因导致我的规则不起作用?如果我忽略生成的密钥并直接在“ books”对象中引用作者/标题/评分,则可以添加不符合我所述条件的数据。
{
"rules": {
".read": "true",
".write": "true",
"books" : {
"???" : {
"author" : {
".validate" : "newData.isString() && newData.val() > 0"
},
"title" : {
".validate" : "newData.isString() && newData.val() > 0"
},
"rating" : {
".validate" : "newData.isNumber()"
}
}
}
}
}
如果有任何提示,我将不胜感激。
答案 0 :(得分:0)
您首先应该去规则模拟器测试您的规则,它位于规则的右侧。
在模拟类型中,选择SET。
在区域中,将/ books / {newkey}写入JSON区域:
{ “作者”:“作者数据” }
对于newkey(您的推式生成键)节点下的每个字段重复此操作。
这至少会告诉您哪些规则不起作用,如果您单击详细信息,您将能够知道原因。
我还要补充一点,您如何得出类似于author:“ stephen的数据,我的意思是没有最后一个引号?
答案 1 :(得分:0)
您应将Firebase按键称为例如“ $ bookId”,然后可以根据需要在规则中使用它。
示例:
{
"rules": {
"rooms": {
// this rule applies to any child of /rooms/, the key for each room id
// is stored inside $room_id variable for reference
"$room_id": {
"topic": {
// the room's topic can be changed if the room id has "public" in it
".write": "$room_id.contains('public')"
}
}
}
}
}