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

Firebase安全规则newData.val()与data.val()比较,firebase,firebase-security,Firebase,Firebase Security,我不明白为什么这条规则没有通过验证 ".validate": "newData.val() < data.val()" .validate:“newData.val()

我不明白为什么这条规则没有通过验证

".validate": "newData.val() < data.val()"
.validate:“newData.val() 但这将通过验证:

".validate": "newData.val() < 70 " 
.validate:“newData.val()<70” 在模拟器中,我输入以下值:69、70和71

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

为什么“newData.val()
PS i将比较字符串固定为整数,如屏幕截图所示。

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

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

在我的安全规则中我有

"users": {
  "$uid": {
    "tokens": {
      ".validate": "newData.isNumber() && newData.val() < data.val()"
    }
  }
}, 
...
“用户”:{
“$uid”:{
“代币”:{
.validate:“newData.isNumber()&&newData.val()
“users”有一个小写的u,而不是大写的u,这是我在数据结构中的键,因此无法像我预期的那样从用户中提取data.val()

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


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

很难准确地看到您在测试什么。你可以分享一个模拟器的屏幕截图,其中包括你正在写入的路径、该位置的当前数据以及你正在写入的数据吗?谢谢你的评论,我开始认为你是对的,但你认为他们提供了一个模拟机,它包含数据和安全规则,它将使用用户令牌条目中的实际值!?如果在编码之前不能计算表达式,那么为什么首先要提供模拟器?我想我将不得不为此设置代码,我正在寻找,以确保逻辑是正确的,然后再编码的应用程序。。。这表明它应该能够从“用户”-“令牌”中提取值,因为在视频中它知道LA不是一个存在的值,但SF是!?好发现。我将尝试重现他的例子。@Learn2Code:是的,你的期望是正确的。经过进一步的实验,我同意模拟器使用数据库中的现有值。那么你能提供更多关于你失败案例的细节吗。我无法复制你的结果。