Firebase DB规则模拟器允许未经身份验证的用户进行读写

Firebase DB规则模拟器允许未经身份验证的用户进行读写,firebase,firebase-realtime-database,firebase-security,firebase-console,Firebase,Firebase Realtime Database,Firebase Security,Firebase Console,模拟器允许读/写Posts密钥,但结果对于用户密钥规则是正确的。Posts下的每个post都有一个uid值,表示Users键中的用户 我的规则错了还是模拟器错了?温柔点,我是Firebase的新手。:) 两个相等: 编辑的数据视图:https://i.stack.imgur.com/GaYMj.png(删除“/”)周围的空格尝试更改规则以检查是否存在uid子级。例如: ".read": "data.child('uid').exists() && data.child('ui

模拟器允许读/写Posts密钥,但结果对于用户密钥规则是正确的。Posts下的每个post都有一个uid值,表示Users键中的用户

我的规则错了还是模拟器错了?温柔点,我是Firebase的新手。:)

两个相等:


编辑的数据视图:https://i.stack.imgur.com/GaYMj.png(删除“/”)周围的空格尝试更改规则以检查是否存在
uid
子级。例如:

".read": "data.child('uid').exists() && data.child('uid').val() === auth.uid"
基于快速测试,我认为发生的情况是,当
uid
子级不存在时,对
data.child('uid').val()的计算失败,并通过为其赋值false来处理。类似地,由于用户未经过身份验证,
auth
为null,
auth.uid
也计算为false。因此,您的规则实际上变成了“
”。读取:“false==false”
,这是真的


当我第一次使用您的规则模拟读取时,我的数据库中在
/posts/1
下没有
uid
子项,正如您所报告的,读取被授予。当我添加一个
uid
子项时,该子项未被授予。

uid始终存在于每个post密钥中。查看我的编辑数据视图屏幕截图。不过我会试试你的例子,然后再向你汇报。但是,这是因为它不是针对当前的实际数据运行的,还是这确实是对我的数据的真正修复(请参见“编辑数据屏幕”)?模拟器使用数据库中的实际数据。屏幕截图仅显示键
-CZWF
的数据。我不知道键
1
下是什么,这是您在示例中使用的。嗯,好的。不知道模拟器实际上是针对DB数据运行的。我必须用实际数据做更多的测试。我认为关闭未经验证的电源会将这些访客完全锁在外面。在检查data.uid=auth.uid之前对其进行空检查可能更安全一些?