【问题标题】:Firebase rule allowing new user inclusion and user-specific path privilegesFirebase 规则允许包含新用户和用户特定的路径权限
【发布时间】:2017-10-12 13:55:11
【问题描述】:

阅读大量教程和 StackOverflow 的问题后,我仍然不知道该怎么做。 所有教程都以以下规则开头:

"users":{
    "$uid":{
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
     }
}

但是如何在新用户登录时允许用户节点中的新用户(auth!= null)并保持读写用户特定的路径权限?

换句话说: 有没有办法让新用户登录后在users节点中插入,同时限制他只能读写自己的节点?

另一个问题。我在另一个节点中有一个带有 newData.exists() 的写入规则。在模拟器中,当我尝试将 null 数据写入节点时,它会按预期拒绝它,但它允许我将 null 写入同一节点的子节点。节点不应该将规则级联写入其子节点吗?

【问题讨论】:

  • 您能否详细说明 - 或举例说明 - 您的第二个问题?
  • 从来没有,抱歉。由于我与它一起设置的另一个规则,它不起作用。

标签: firebase firebase-security


【解决方案1】:

您上面的规则将匹配$uidauth.uid。因此,例如,如果用户的 UID 是 cKzMyjImSBX6ybzeCCCjf0qbTym1,他们将只能在您的数据库中读取和写入 /users/cKzMyjImSBX6ybzeCCCjf0qbTym1,无论此密钥当前是否存在(如果写入时它不存在) ,它将被创建)。

来自Firebase documentation on rules

一旦用户进行身份验证,您的 Firebase 数据库中的 auth 变量 规则规则将填充用户信息。这 信息包括其唯一标识符 (uid) 以及链接 帐户数据,例如 Facebook id 或电子邮件地址,以及其他 信息。

【讨论】:

  • 好了,终于明白了,规则是和数据相关的,不是和key相关的。所以我不需要担心用户密钥(id)的创建,而主要是对存储在密钥下面的所有信息的访问(读取和写入)。感谢 Grimthorr 为我指明方向。
  • 我基本上将我的规则保留为上面的示例,并且能够按照我想要的方式写入和读取数据库。
猜你喜欢
  • 2019-03-12
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 2017-03-10
  • 2020-07-26
  • 2018-04-24
  • 1970-01-01
相关资源
最近更新 更多