我有一个非常简单的Firebase数据库,只有一个条目" async-testing / companies:0"。
我有以下firebase规则,如果未定义则将"companies"
设置为0,否则允许写入如果它比"companies"
的当前值大1:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"async-testing": {
"companies": {
".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)"
}
}
}
}
然而,当我试图设置"公司"在Firebase模拟器中等于1,它不起作用:
更奇怪的是,当我将Firebase规则设置为仅在未定义"companies"
时接受写入时,它才能正常工作:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"async-testing": {
"companies": {
".validate": "!data.exists()"
}
}
}
}
任何帮助将不胜感激。谢谢。
答案 0 :(得分:2)
在模拟器图像中,显示位置字段
https://async-testing.firebaseio.com/
。这表示您的项目名称为async-testing
。 (我不知道你是如何得到这么简单的项目名称的。我的所有内容都包含一些自动生成的数字或其他文字。)
在数据库的图像中,列出async-testing
代表数据库的根目录。这不是一条路。我相信你错误地将async-testing
的外观误认为它是一个路径组件,必须包含在规则中。
因为@JoeWu在他的回答中指出(我对其进行了投票),您的规则不应包含async-testing
作为companies
的父位置。或者,如果您希望保留规则,则需要重新创建数据库以创建根子async-testing
,并创建companies
作为其子项。
答案 1 :(得分:1)
不需要'async-testing'图层。尝试:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"companies": {
".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)"
}
}
}
答案 2 :(得分:0)
我尝试过它。
检查: