firebase - 无法读取 firebase 孩子
问题描述
用户登录时可以数据。但我希望每个人都可以对这个孩子。无论登录。
孩子是“gunluksifreler”
这是我的规则
{
"rules": {
"Homeland": {
".indexOn": ["username","email","bakiyetl","yarismada","yarismadabb","splashmesaj","uygulama1tut","uygulama2tut","uygulama3tut","uygulama4tut","uygulama5tut","uygulama6tut","uygulama7tut","uygulama8tut","uygulama9tut","uygulama10tut"]
},
"Odultalepleri": {
".indexOn": ["username","odul1"]
},
"Yardim": {
".indexOn": ["id"]
},
"gunluksifreler": {
".read": true, // <-- allows every person
".write": true
},
"Devices": {
".read": true, // <-- allows every person
".write": true
},
".read": "auth !== null", // <-- allows read if logged in
".write": "auth !== null" // <-- allows write if logged in
}
}
当我设置真正的最后阅读行时,每个人都可以阅读
".read": true, // <-- allows read everbody
".write": "auth !== null" // <-- allows write if logged in
但这一次每个人都可以阅读每个孩子。我错过了什么?
代码
var kullanici = firebase.database().ref();
kullanici.on('value' ,function(datasnapshot) {
if(datasnapshot.hasChild("gunluksifreler")){
alert("yes");
}});
但这与代码无关,而与规则有关。
解决方案
如果您不希望匿名用户能够读取整个数据库,则不应在"read": true
安全规则的根级别允许。
然后,如果您想允许所有人阅读kullanici
,则应"read": true
在规则中允许该节点。
因此,您原始规则的这一部分对我来说看起来不错:
{
"rules": {
"gunluksifreler": {
".read": true
},
".read": "auth !== null"
}
}
我强烈建议将来在您的问题中同样关注规则/代码,因为它可以确保我们都在查看相同的最小但完整的片段。
问题不在于规则,而在于您的代码:
var kullanici = firebase.database().ref();
kullanici.on('value', ...
这是试图读取规则明确不允许的数据库的根目录。所以这个读被拒绝了。
记住这一点的一个好方法是Firebase 安全规则不会自行过滤任何数据。他们只是检查您尝试执行的读取是否允许。所以上面的读取尝试读取根目录,这是不允许的。Firebase 不会检查根的每个子节点以仅返回允许的子数据,因为其性能很难保证。
如果要读取kullanici
节点,则应仅将侦听器附加到该节点:
var kullanici = firebase.database().ref("kullanici");
kullanici.on('value', ...
推荐阅读
- python - 在 tkinter 画布上动态调整矩形大小
- kotlin - 在当前上下文中如何访问 Kotlin 协程元素?
- python - python中'lambda'表达式的问题
- windows - 如果机器规格发生变化,我们能否预测 Windows 应用程序将如何工作?
- python - Selenium driver.requests.Timeout 在加载超时后不会停止请求
- asp.net-core - MVC Core 中的混合用户身份
- javascript - 使移动视图在 +90 度的横向上保持纵向模式
- javascript - 通过对象数组的 Javascript 映射
- apache - 找不到包 apache2-mpm-worker
- javascript - 为什么我的 JavaScript 中的“keypress”在单击 HTML 按钮后同时表现得像“keypress”和“keyup”?