模拟器允许读/写Posts键,但结果对于Users键规则是正确的。帖子下的每个帖子都有一个uid值,表示用户密钥中的用户。
我的规则是错误还是模拟器错了?温柔,我是Firebase的新手。 :)
两个等于:
编辑数据视图:https:// i.stack.imgur.com/GaYMj.png(删除" //"周围的空格)
答案 0 :(得分:2)
尝试更改规则以检查uid
子项是否存在。例如:
".read": "data.child('uid').exists() && data.child('uid').val() === auth.uid"
基于快速测试,我认为发生的事情是,当uid
子项不存在时,data.child('uid').val()
的评估失败,并通过为其赋值false来处理。同样,由于未对用户进行身份验证,因此auth
为空,auth.uid
也为false。所以你的规则实际上变成".read": "false === false"
,这是真的。
当我第一次使用您的规则模拟读取时,我在uid
下的数据库中没有/posts/1
子项,正如您所报告的那样,读取已被授予。当我添加一个uid
孩子时,它没有被授予。