在阅读了很多教程和StackOverflow的问题之后,我仍然无法想象如何去做。 所有教程都以以下规则开头:
"users":{
"$uid":{
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
但是当新用户登录(auth!= null)并保持读写用户特定的路径权限时,如何在用户节点中允许新用户?
换句话说: 是否有办法在登录后将新用户插入用户节点,同时限制他只读取和写入自己的节点?
另一个问题。我在另一个带有newData.exists()的节点中有一个写规则。在模拟器中,当我尝试将空数据写入节点时,它会按预期拒绝它,但它允许我将null写入此同一节点的子节点。节点写入规则不应该级联到其子节点吗?
答案 0 :(得分:0)
您上面的规则将$uid
与auth.uid
匹配。因此,例如,如果用户的UID是cKzMyjImSBX6ybzeCCCjf0qbTym1
,则他们将只能阅读&在数据库中/users/cKzMyjImSBX6ybzeCCCjf0qbTym1
写入,无论此密钥当前是否存在(如果写入时不存在,将创建它)。
来自Firebase documentation on rules:
用户进行身份验证后,Firebase数据库中的auth变量 规则规则将填入用户的信息。这个 信息包括其唯一标识符(uid)以及链接 帐户数据,例如Facebook ID或电子邮件地址等 资讯