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

问题描述 投票:0回答:1

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

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

Screenshot

两个等于:

Screen

编辑数据视图:

Screen

firebase firebase-realtime-database firebase-security firebase-console
1个回答
2
投票

尝试更改规则以检查

uid
子项是否存在。例如:

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

基于快速测试,我认为发生的情况是,当

uid
子项不存在时,
data.child('uid').val()
的评估失败,并通过为其分配 false 值来处理。 同样,由于用户未经过身份验证,因此
auth
为 null,并且
auth.uid
也计算为 false。 所以你的规则实际上变成了
".read": "false === false"
,这是真的。

当我第一次使用您的规则模拟读取并且我的数据库中的

uid
下没有
/posts/1
子项时,读取被授予,正如您所报告的。 当我添加一个
uid
孩子时,它没有被授予。

© www.soinside.com 2019 - 2024. All rights reserved.