【问题标题】:How to fix security rules for newData on set function如何在 set 函数上修复 newData 的安全规则
【发布时间】:2019-07-06 12:12:19
【问题描述】:

我正在开发一个离子应用程序,我想将数据作为对象发送到我的 firebase 实时数据库并将数据与某些东西进行比较,但是在服务器端这是我的 newData 安全规则,写规则似乎不正确。

这是我的发送代码

var firebaseRef = this.afd.database.ref();
firebaseRef.child('Download/01/1').set({password:2431,name:'john'});

我的数据库节点应该写在这里

Download: {
  01 : {
      1: { // the data will be written here

      }
  }
}

这是我的安全规则

"Download": {    
   "$id": { 
      ".write": "newData.child('password').val() === 4321"
   }
}

如您所见,我特意在我的设置函数“2431”上写入了密码,以便在验证写入规则期间被处理为不正确,但是写入规则仍然在写入数据库时​​继续进行,即使密码它接收不正确,你能告诉我的代码应该更正什么吗?谢谢

【问题讨论】:

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


    【解决方案1】:

    您的规则和查询不匹配。您正在写入“Download/01/1”,密码设置为“Download/01/1/password”。但是,您的规则设置为“下载/XX”,newData.child('password') 指的是“下载/XX/密码”(注意路径中缺少“1”)。也许您的意思是:

    "Download": {    
       "$id": {
          "$i": {
            ".write": "newData.child('password').val() === 4321"
          }
       }
    }
    

    或许:

    "Download": {    
       "$id": { 
          ".write": "newData.child('1').child('password').val() === 4321"
       }
    }
    

    【讨论】:

    • 你做对了,谢谢它有效!我之前也通过删除我设置的函数目录中的“1”来进行测试,并且很震惊,因为它与“1”不同。你的解释让一切都清楚了!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多