【问题标题】:Simulator refuse to set new data to firebase database模拟器拒绝将新数据设置到 Firebase 数据库
【发布时间】:2018-10-30 21:43:01
【问题描述】:

我正在根据我的 firebase 数据库调整规则。当我尝试将新数据设置到我的数据库时,我总是被拒绝。这是我的数据库的规则:

 {
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {

    "challenges":{
      ".write": "auth != null",
      //".write":"auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\" || ((newData.exists() && !data.exists()) || (auth.uid.value == data.child(\"player1Uid\").val() || auth.uid.value == data.child(\"player2Uid\").val()))",
      ".read": "auth != null"
    },

    "comments":{
        ".write": "auth != null",
//      ".write":"auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\" || ((newData.exists() && !data.exists()) || auth.uid.value == data.child(\"writerUid\").val())",
      ".read": "auth != null"
    },

    "lessons":{
       ".write": "auth != null",
      //".write":"auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\" || ((newData.exists() && !data.exists()) || auth.uid.value == data.child(\"writerUid\").val())",
      ".read": "auth != null"
    },

    "posts":{
      ".read": "auth != null",
      //".write": "auth != null"

         "$postId": {
        // a new post can be created if it does not exist
        // existing posts can only be edited by their original "author"
        ".write": "(!data.exists() && newData.exists() && auth != null) || data.child('writerUid').val() == auth.uid || auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\" "
        //".validate": "newData.hasChildren(['title', 'author', 'timestamp'])",
     }
    },

    "questions":{
      ".write": "auth != null",
      //".write":"auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\" || ((newData.exists() && !data.exists()) || auth.uid.value == data.child(\"writerUid\").val())",
      ".read": "auth != null"
    }, 

    "users":{
      ".write": "auth != null",
      //".write":"auth.uid == \"DFhNb28506Y345CpJ3Ye7DQNn713\" || ((newData.exists() && data.child(\"userEmail\").val() != null) || auth.token.email == data.child(\"userEmail\").val())",
      ".read": "auth != null"
    },

  }
}

当我尝试添加新帖子时,如果我尝试使用我在应用程序中硬编码编写的 uid 添加新帖子,它总是被拒绝,它也被拒绝。我花了很长时间尝试设置我的规则,但直到现在我才设置它,我发现规则无法调试,所以我希望有人帮助我解决这个问题。

这是我的数据库结构:

【问题讨论】:

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


    【解决方案1】:

    你必须取消注释这一行

          //    "$postId": {
    

    您已经在“帖子”节点中有帖子,所以!data.exists 返回 false 并阻止您的新帖子

    【讨论】:

    • 此评论在复制规则时出错,请查看我对规则的更新
    • 你在模拟器里放了什么?我只是将您的规则复制到一个项目中,以免我写入 /posts/postid1
    • 我写位置 /posts/ 因为我需要添加新帖子
    • 我不需要编辑帖子我需要创建新帖子
    • 那么问题来了,你必须写入posts/postid,因为你的规则是指定的,当你推送数据时,posts中的规则中的节点将被创建,稍后你可以访问它编辑,在 postid 节点中发生的所有事情,而不是在帖子中,您的规则是 ".write": "false",默认
    猜你喜欢
    • 1970-01-01
    • 2017-03-03
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2016-09-22
    • 2023-03-04
    • 2020-10-08
    相关资源
    最近更新 更多