2016-02-16 45 views
1

我明显缺少一些基本的Firebase安全性方面的内容,因为这不应该起作用。我希望它在尝试推送无效数据时会抛出验证错误。 (插入一个新的节点进入/节点)无法使用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);}); 

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

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

回答

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)" 
     } 
     } 
    } 
    } 
} 
+0

感谢您向Benjamin报告。在那里错过通配符/ $变量确实是一个常见的错误。 –