Firebase安全规则newData.val()与data.val()进行比较

时间:2017-05-12 03:03:01

标签: firebase firebase-security

我不明白为什么这条规则验证失败

".validate": "newData.val() < data.val()"

但这将通过验证:

".validate": "newData.val() < 70 " 

在模拟器中,我输入以下值:69,70和71

在第一条规则中,所有3个数字的验证都失败了; 正如预期的那样,第二次验证会传递给69值,而70和71则不符合预期......

为什么验证不适用于&#34; newData.val()&lt; data.val()&#34;!?

PS我将比较字符串固定为整数,如屏幕截图所示。

2 个答案:

答案 0 :(得分:2)

好的,这将是愚蠢的,大多是一个新手的错误,但我发现了自己的愚蠢错误!

根据我的安全规则

"users": {
  "$uid": {
    "tokens": {
      ".validate": "newData.isNumber() && newData.val() < data.val()"
    }
  }
}, 
...

用户&#39;有一个小写的u而不是大写的U,它是我在数据结构中的键,所以data.val()不能像我期望的那样从用户那里拉出来......

愚蠢的错误....所以请确保使用正确的案例,因为安全规则是区分大小写的,因为我刚发现!!! \ / p>

PS疯狂的部分是正确触发的.read和.write安全规则的其余部分,只是data.val()函数无法提取值...如果这样做会更容易Firebase否认了所有安全措施,很快就会发现我的错误...... Firebase应该缩小这个差距!?

答案 1 :(得分:1)

如果您的新数据值是数字,您可能不希望将其与字符串进行比较:'70'。如果新值是一个字符串,并在模拟器“Data JSON”框中输入为字符串(带引号),如“70”,则验证newData.val() < '70'有效。