Firebase规则解决错误

时间:2018-12-04 13:38:58

标签: android firebase firebase-realtime-database firebase-security-rules

我正在尝试为数据库设置Firebase规则,但是datanewData遇到问题

根据firebase:

  

newData RuleDataSnapshot与将要生成的数据相对应   如果允许写。

     

对于.write和.validate规则,newData变量为您提供了   RuleDataSnapshot对应于如果   允许写入(这是现有数据与新数据的“合并”   数据被写入)。

所以我有以下规则:

"users_details":{  
                "$uid":{
                   ".write":"$uid == auth.uid && newData.exists()",
                   ".read":"$uid == auth.uid",
                    ".validate":"newData.child('auth').hasChild('crsfToken')",
                }

用户有一个字段auth,其中有一个字段crsfToken ...因此,每次有人写一个用户时,我都想确保“已编辑”的用户会有auth/crsfToken

好的。

假设a具有一个实际的有效用户abc

然后我想在abc上设置另一个与任何规则都没有关系的字段... 可以说:abc.field.subField = 1

所以我正在做的是: FirebaseDatabase.getInstance().getReference(Firebase.NODE_USERS_DETAILS).child(user.getUserid()).child("field").child("subField").setValue(1);

这并没有改变authcrsfToken,但我却得到了Permision Denied

当我在控制台上进行仿真时,我看到这不是在写,因为验证规则被拒绝

为什么?有什么方法可以调试Firebase规则并查看模拟中的newData是什么?

1 个答案:

答案 0 :(得分:0)

规则可以解决:)因为将检查user_details / UID / *上所有数据操作的规则。因此,如果您更新user_detail / UID / field / subField,将检查您的规则,并且您将被拒绝访问。您说过要检查newData.auth.crsfToken并且确实在执行此操作,但是现在您想要更新field / subField而不进行检查吗?在这种情况下,您不想检查crsfToken是否存在?