Firebase 安全规则 newData.val() 与 data.val() 相比

Firebase security rules newData.val() compared to data.val()

我不明白为什么此规则未通过验证

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

但这将通过验证:

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

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

在第一条规则中,所有3个数字的验证都失败了; 而第二次验证它按预期通过了 69 值,并按预期失败了 70 和 71...

为什么 "newData.val() < data.val()" 的验证不起作用!?

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

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

好吧,这会很愚蠢,主要是新手犯的错误,但我发现了我自己的愚蠢错误!!!

在我的安全规则中我有

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

'users' 有一个小写的 u 而不是大写的 U,这是我在数据结构中的键,所以 data.val() 无法像我预期的那样从用户那里提取。 ..

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

PS 疯狂的部分是正确触发的其余 .read 和 .write 安全规则只是 data.val() 函数无法提取值......它会如果 Firebase 拒绝所有安全措施,事情会容易得多,可能会更快发现我的错误……Firebase 应该缩小差距!?