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时,没有被授予。
模拟器允许 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时,没有被授予。