Firebase数据库规则意外行为
我正在按照文档设置规则。这是一个简单的聊天应用程序,我只想检索最近的消息(即在最近X分钟内创建的消息)。我找到了以下内容,并尝试了完全相同的方法 结构 规则 似乎没有检索到任何消息。作为解决方法,我在客户端这样做:Firebase数据库规则意外行为,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我正在按照文档设置规则。这是一个简单的聊天应用程序,我只想检索最近的消息(即在最近X分钟内创建的消息)。我找到了以下内容,并尝试了完全相同的方法 结构 规则 似乎没有检索到任何消息。作为解决方法,我在客户端这样做: messagesRef.orderByChild('timestamp') .startAt(Date.now() - 600000) .on('child_added', (data) => { // do something }) 希望有人能帮我制定
messagesRef.orderByChild('timestamp')
.startAt(Date.now() - 600000)
.on('child_added', (data) => {
// do something
})
希望有人能帮我制定规则 您所参考的文档保护每个单独消息的节点。因此,如果
/messages/-LDR\ux…ADvS
不太旧,则可以访问它
但是您的查询是从/messages
读取的,您没有授予任何人权限
这是Firebase安全规则中最常见的陷阱之一的示例:规则不是过滤器。有关这方面的更多信息,我建议查看Firebase文档中的部分、本部分或此后的部分内容
但今年早些时候情况有所改变。虽然安全规则仍然不能用于筛选数据,但它们可以用于验证查询。例如,请参见下面的示例:
这允许您通过所有者==uid
查询时从/baskets
读取数据。因此,现在我们授予用户访问/baskets
,但前提是它们满足服务器端安全规则指定的条件
不幸的是,上次我检查时,当前的时间戳
在查询中不可用,因此无法编写只允许您的变通查询的规则
messagesRef.orderByChild('timestamp')
.startAt(Date.now() - 600000)
.on('child_added', (data) => {
// do something
})
"baskets": {
".read": "auth.uid != null &&
query.orderByChild == 'owner' &&
query.equalTo == auth.uid" // restrict basket access to owner of basket
}