【问题标题】:Firebase realtime database rules simulation failedFirebase 实时数据库规则模拟失败
【发布时间】:2020-01-04 19:20:57
【问题描述】:

这是我的 firebase json 数据。

{
    "Users": {
        "MyData": {
            "002ab7bUmab1CgQsw53abB3g1Ab1": { //UID
                "-A3ABlabkflA_ABabABA": { //this is the databaseReference.child(DBHelper.FIREBASE_POSTS).push().getKey();
                    "display": "123",
                    "result": {
                        "format": "1",
                        "id": 1,
                        "numBits": 0,
                        "syncFirebaseId": "-A3ABlqmkflA_AVabABA",
                        "syncStatus": -1,
                        "text": "1234567",
                        "timestamp": 1514496903005
                    }
                },
                "-A2ABlabkf2A_ABabABA": { //this is the databaseReference.child(DBHelper.FIREBASE_POSTS).push().getKey();
                    "display": "123",
                    "result": {
                        "format": "1",
                        "id": 1,
                        "numBits": 0,
                        "syncFirebaseId": "-A3ABlqmkflA_AVabABA",
                        "syncStatus": -1,
                        "text": "1234567",
                        "timestamp": 1514496903005
                    }
                }
            }
        }
    }
}

规则:

{
  "rules": {
    "Users": {
      "MyData": {
        "$uid": {
          ".read": "auth != null && auth.uid == $uid"
        }
      }
    }
  }
}

但是当我模拟时,读取操作被拒绝。我想只允许经过身份验证的用户更新与他/她自己相关的数据节点。该用户不应该能够编辑其他人的数据节点 (UID)。

这是读取模拟的结果:

【问题讨论】:

  • 请编辑您的问题以包含失败的读写模拟。另外,请将您问题中的 JSON 树的图片替换为实际的 JSON 作为文本。您可以通过单击your Firebase Database console 的溢出菜单 (⠇) 中的 Export JSON 链接轻松获取此信息。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
  • 顺便说一句:您在 JSON 中拼写为 users,在规则中拼写为 Users(大写为 U)。规则区分大小写,因此 JSON 和规则之间的大小写必须匹配。
  • @FrankvanPuffelen 我编辑了 json 并且我已经尝试了大写字​​母,但仍然无法执行读取模拟。你的帮助对我很有帮助。
  • 请编辑您的问题以包含失败的读写模拟。
  • 您正在尝试读取数据库的根目录。由于您的规则授予任何人访问整个数据库的权限,因此读取被拒绝。如果您模拟从/Users/MyData/$theUidThatYouStruckOut 读取,则将被允许。

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


【解决方案1】:

您正在尝试读取数据库的根目录。由于您的规则授予任何人访问整个数据库的权限,因此读取被拒绝。如果您模拟从/Users/MyData/$theUidThatYouStruckOut 读取,则将被允许。

【讨论】:

    【解决方案2】:

    我认为auth.uid == $uid" 应该是auth.uid === $uid"。欲了解更多信息,请通过this

    【讨论】:

    • ===== 在这种情况下没有区别。两者都会给出相同的结果。
    【解决方案3】:

    你有更改规则

    {
      "rules": {
        "Users": { *** This Line
          "MyData": {
            "$uid": {
              ".read": "auth != null && auth.uid == $uid"
            }
          }
        }
      }
    } 
    

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2020-02-16
      相关资源
      最近更新 更多