Firebase规则权限被拒绝,但为什么?

时间:2017-09-13 22:48:06

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

这是我的规则:

{
  "rules": {
    "freecoinsrequest":{
      ".read": false,
        ".write": "
      newData.child('uid').val() == auth.uid 
       1. && (root.child('users').child(auth.uid).child('/server/lasttimetookfreecoins').val() < now - 10000 
       2. || !root.child('users').child(auth.uid).child('/server/lasttimetookfreecoins').exists())
       " ,
      "uid":{
        ".validate" : true
      },
        "$other":{
          ".write": false,
          ".validate": false
        }
    },
  }
}

因此,用户应该只能在以下情况下写入路径:

  • JSON包含“uid”作为键,他的uid作为值
  • 他没有在10秒钟内写入server / lasttimetookfreecoins或
  • 他从未写过服务器/ lasttimetookfreecoins

我无法理解为什么它会在模拟器中被拒绝。当我取消注释1和2时,如规则中所示,它可以工作。

感谢。

1 个答案:

答案 0 :(得分:1)

在我的测试中,规则在/users/$uid/server/lasttimetookfreecoins存在时产生了期望的结果但在没有的时候失败了。颠倒固定条件的顺序:

  newData.child('uid').val() == auth.uid 
    && (!root.child('users').child(auth.uid).child('/server/lasttimetookfreecoins').exists()
    || root.child('users').child(auth.uid).child('/server/lasttimetookfreecoins').val() < now - 10000)