2016-08-02 43 views
0

我正在使用firebase的.on()事件监听器实时监听插入到我的数据库中的条目。我注意到,即使在数据插入被拒绝的情况下,订阅数据本来应该插入的用户仍然可以获取该数据,即使在数据库中数据永远不会被插入。权限被拒绝仍然被添加到.on()监听器

我在开发我的web应用程序的聊天模块时注意到了这一点。下面是错误的GIF:https://gfycat.com/VariableFrailBasenji

我设置新的消息的验证规则,他们的长度必须在200:

"$msg": { ".validate": "newData.val().length < 200"} 

所以当你看到我在一堆字母贴,控制台表示写入被拒绝,但具有订阅数据库部分的用户仍然收到该消息,即使它未被添加到数据库中。

总之,这不是一个真正的帖子,只是想分享这个可能导致数据泄露的奇怪的错误。

回答

1

当您写入数据库时​​,Firebase SDK使用延迟补偿等高级技术。这意味着在服务器确认写入之前,它将进入内存数据库缓存并乐观地认为写入将被允许。

当服务器拒绝写入时,它将删除错误缓存的数据,您应该看到相应的child_removed事件。