如果Firebase数据库规则为';那不应该吗?
我正在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()在
"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
<代码>数据指的是数据库中当前存在的数据,因为该位置还没有数据(假定),所以它总是返回truenewData
将按原样验证数据和新数据,因此您应该使用这些数据。另外,对我来说,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
进行了测试。不管怎样,这成功了,谢谢