增量操作的Firebase规则不起作用
我有一个非常简单的Firebase数据库,只有一个条目“async testing/Companys:0”。 我有以下firebase规则,如果未定义,则将增量操作的Firebase规则不起作用,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我有一个非常简单的Firebase数据库,只有一个条目“async testing/Companys:0”。 我有以下firebase规则,如果未定义,则将“companys”设置为0,如果大于“companys”的当前值1,则允许写入: { "rules": { ".read": "auth != null", ".write": "auth != null", "async-testing": { "companies": {
“companys”
设置为0,如果大于“companys”
的当前值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规则设置为仅在“companys”
未定义时才接受写操作时,它工作正常:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"async-testing": {
"companies": {
".validate": "!data.exists()"
}
}
}
}
任何帮助都将不胜感激。谢谢 不需要“异步测试”层。尝试:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"companies": {
".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)"
}
}
}
不需要“异步测试”层。尝试:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"companies": {
".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)"
}
}
}
我试过了,效果很好
检查:
- 检查您的公司是否真的设置为0
- 在没有模拟器的情况下用一个真实的请求来尝试它(以防万一)
- 检查您的公司是否真的设置为0
- 在没有模拟器的情况下用一个真实的请求来尝试它(以防万一)
https://async-testing.firebaseio.com/
。这表示您的项目名称为异步测试
。(我不知道你是怎么得到这么简单的项目名称的。我的项目名称都包含一些自动生成的数字或其他文本。)
在数据库的映像中,列出了异步测试,以表示数据库的根。这不是一条路。我相信您错误地认为异步测试的出现意味着它是一个路径组件,必须包含在规则中
因此,正如@JoeWu在他的回答(我投了赞成票)中指出的那样,您的规则不应该将异步测试
作为公司
的父位置。或者,如果您想保持规则不变,则需要重新创建数据库,以创建根子级异步测试
,并将公司
创建为子级。在模拟器图像中,位置字段显示
https://async-testing.firebaseio.com/
。这表示您的项目名称为异步测试
。(我不知道你是怎么得到这么简单的项目名称的。我的项目名称都包含一些自动生成的数字或其他文本。)
在数据库的映像中,列出了异步测试
,以表示数据库的根。这不是一条路。我相信您错误地认为异步测试的出现意味着它是一个路径组件,必须包含在规则中
因此,正如@JoeWu在他的回答(我投了赞成票)中指出的那样,您的规则不应该将异步测试
作为公司
的父位置。或者,如果您想保持规则不变,则需要重新创建数据库,以创建根子级异步测试
,并作为子级创建公司
。能否向我们展示错误详细信息我刚刚尝试过,效果很好..嗯,非常奇怪。我又试了一次,但还是不起作用。我还尝试使用一个真实的请求向db写入数据,我尝试过的每个查询(包括{“companys”:3})在您的数据库中没有输入错误?关于公司或异步测试?你能告诉我们错误详细信息吗?我刚试过,效果很好..嗯,很奇怪。我又试了一次,但还是不起作用。我还尝试使用一个真实的请求向db写入数据,我尝试过的每个查询(包括{“companys”:3})在您的数据库中没有输入错误?在公司或异步测试中?您的解决方案奏效了,我认为问题在于我将根路径设置为与数据库相同的名称。谢谢您的解决方案奏效了,我认为问题在于我将根路径设置为与数据库相同的名称。谢谢