无法使用Firebase安全性验证子节点

时间:2016-02-16 22:58:30

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

我显然忽略了firebase安全性的一些基本方面,因为这不应该起作用。我希望它在尝试推送无效数据时抛出验证错误。 (将新节点插入/节点)

规则:

{
  "rules": {
    "nodes": {
      ".read": "auth !== null && auth.provider === 'google'",
      ".write": "auth !== null && auth.provider === 'google'",
      "user": {
        ".validate": "newData.val() === auth.uid"
      },
      "ts": {
        ".validate": "newData.val() <= now && newData.val() >= (now-1000*60*60*24)"
      }
    }
  }
}

然后在我的控制台中,我尝试故意插入无效数据:

ref.child('nodes').push({
  'user': 'abc',
  'ts': 123
}, function(err){console.log(err);});

哪个日志为null,当我检查我的数据库时,它被插入,没有验证错误!我知道我有一些根本错误的东西,因为在以下的.read和.write行之后的验证规则不允许任何写入。 .validate": "newData.hasChildren(['user', 'ts'])",

{
  "nodes" : {
    "-KAgH0BLneWfGu8NymBo" : {
      "ts" : 123,
      "user" : "abc"
    }
  }
}

1 个答案:

答案 0 :(得分:2)

糟糕。缺少“$ node_id”

{
  "rules": {
    "nodes": {
       "$node_id":{
         ".read": "auth !== null && auth.provider === 'google'",
         ".write": "auth !== null && auth.provider === 'google'",
         "user": {
           ".validate": "newData.val() === auth.uid"
         },
         "ts": {
           ".validate": "newData.val() <= now && newData.val() >= (now-1000*60*60*24)"
         }
       }
    }
  }
}