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

Firebase DB rules simulator allow read and write by unauthenticated users

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

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

两个等于:

已编辑数据视图:https://i.stack.imgur.com/GaYMj.png(删除“//”周围的空格)

尝试更改规则以检查 uid child 是否存在。例如:

".read": "data.child('uid').exists() && data.child('uid').val() === auth.uid"

根据快速测试,我认为发生的情况是当 uid child 不存在时,data.child('uid').val() 的评估失败并通过分配给它来处理假值。同样,由于用户未经过身份验证,因此 auth 为 null,并且 auth.uid 的计算结果也为 false。所以你的规则实际上变成了 ".read": "false === false",这是真的。

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