Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果Firebase数据库规则为';那不应该吗?_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

如果Firebase数据库规则为';那不应该吗?

如果Firebase数据库规则为';那不应该吗?,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我正在Firebase上测试数据的安全性。我最近在文档上花了相当长的时间,我认为我理解了它,但是在模拟器上做类似的事情时,我的头都被抓了起来: 该规则规定: "propiedades": { ".read": "auth != null", ".write": "auth != null", ".validate": "data.child('owner').val() === auth.token.sub" } 而data.child('owner').val()在

我正在Firebase上测试数据的安全性。我最近在文档上花了相当长的时间,我认为我理解了它,但是在模拟器上做类似的事情时,我的头都被抓了起来:

该规则规定:

"propiedades": {
    ".read": "auth != null",
    ".write": "auth != null",
    ".validate": "data.child('owner').val() === auth.token.sub"
}
data.child('owner').val()
在这种特殊情况下是
“S0KF6RVEZMFGJVQ9Q14GQ6S14H32”
也不等于
“S0KF6RVEZMFGJVQ9Q14GQ6S14H3”
(后面有一个“2”)也不应该是
==data.child('owner').val()
但特别是
auth.token.sub
应该是。这到底是怎么回事

作为旁注,即使字符串相等,甚至当我将规则更改为以下内容时,操作仍会进行:

"propiedades": { 
    ".read": "auth != null",
    ".write": "auth != null",
    "$id" : {
      ".validate": "data.child('owner').val() === auth.token.sub"
    }
}
繁重的编辑来自于这样一个事实,即我正在测试所有可能的组合,而一切都违背了我的逻辑。在这一点上我很困惑


谢谢

您正在检查
是否“propriedades/owner”===auth.token.sub
但是当您写入数据时,您正在向
“propriedades”
的子级
“fgdfg”
写入数据,这意味着您的所有者节点将以
propriedades/fgdfg/owner“
结束

你和我在一起是对的

"propiedades": { 
    ".read": "auth != null",
    ".write": "auth != null",
    "$id" : {
        ".validate": "data.child('owner').val() === auth.token.sub"
    }
}
除非您应该使用
newData
而不是
data
<代码>数据指的是数据库中当前存在的数据,因为该位置还没有数据(假定),所以它总是返回true
newData
将按原样验证数据和新数据,因此您应该使用这些数据。另外,对我来说,auth.token.sub似乎从来都不起作用,所以我改用auth.uid,如果auth.token.sub对您起作用,您可以保留它。但我会用auth.uid替换它

以下是正确的规则:

"propiedades": { 
    ".read": "auth != null",
    ".write": "auth != null",
    "$id" : {
        ".validate": "newData.child('owner').val() === auth.uid"
    }
}

当我把“fgdfg”的孩子也带出去时,验证也通过了。我还在几个地方用
data
newData
进行了测试。不管怎样,这成功了,谢谢