firebase - Firebase 规则通配符和子项比较
问题描述
我正在尝试将 Firebase 的规则通配符与儿童比较混合。
我正在读其他地方的孩子,他的价值是'4'。
当我进行字面比较时,模拟器给了我绿灯(像这样):
{
"rules": {
"die": {
"rolls": {
"$i": {
".read": "4 == root.child('die/i').val()"
}
},
"i": {
".read": true,
".write": true
}
}
}
}
输出(成功):
Type read
Location /die/rolls/4
Data null
Auth null
Read successful
Line 7 (/die/rolls/4)
read: "4 == root.child('die/i').val()"
但是通配符比较失败。为什么?
{
"rules": {
"die": {
"rolls": {
"$i": {
".read": "$i == root.child('die/i').val()"
}
},
"i": {
".read": true,
".write": true
}
}
}
}
输出(失败):
Type read
Location /die/rolls/4
Data null
Auth null
Read denied
Line 7 (/die/rolls/4)
read: "$i == root.child('die/i').val()"
(另外,我尝试过模拟身份验证;同样的事情。)
解决方案
失败的原因是因为
root.child('die/i').val()
返回一个数字。根据 Firebase 文档
注意:路径键始终是字符串。出于这个原因,重要的是要记住,当我们尝试将 $ 变量与数字进行比较时,这总是会失败。这可以通过将数字转换为字符串来纠正(例如 $key === newData.val()+'')
以下为您提供您想要的结果
{
"rules": {
"die": {
"rolls": {
"$i": {
".read": "$i === root.child('die/i').val()+''"
}
},
"i": {
".read": true,
".write": true
}
}
}
}
Firebase文档
推荐阅读
- tensorflow - 保存不同时期的 model.fit 历史
- asp.net - 为什么在 IIS Express 的双 localhost 上运行 asp.net mvc
- java - 嵌套 Java 类的 No Encoder found 错误
- function - PowerShell IntelliSense 参数
- javascript - TypeError:state.confirmed.map 不是函数
- python - 尝试在 GoDaddy 上部署 Flask 应用程序时出现 403
- c# - 将 Dart 连接到 .Net Core TCP 套接字
- c# - Pulumi C#:在 RunAsync 之前访问堆栈名称
- arrays - 如果值符合条件,则谷歌表格中的 ArrayFormula SUM
- sql - 将生成的列添加到现有表 Postgres