2016-08-02 103 views
0

我正在使用firebase的.on()事件監聽器實時監聽插入到我的數據庫中的條目。我注意到,即使在數據插入被拒絕的情況下,訂閱數據本來應該插入的用戶仍然可以獲取該數據,即使在數據庫中數據永遠不會被插入。權限被拒絕仍然被添加到.on()監聽器

我在開發我的web應用程序的聊天模塊時注意到了這一點。下面是錯誤的GIF:https://gfycat.com/VariableFrailBasenji

我設置新的消息的驗證規則,他們的長度必須在200:

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

所以當你看到我在一堆字母貼,控制檯表示寫入被拒絕,但具有訂閱數據庫部分的用戶仍然收到該消息,即使它未被添加到數據庫中。

總之,這不是一個真正的帖子,只是想分享這個可能導致數據泄露的奇怪的錯誤。

回答

1

當您寫入數據庫時​​,Firebase SDK使用延遲補償等高級技術。這意味着在服務器確認寫入之前,它將進入內存數據庫緩存並樂觀地認爲寫入將被允許。

當服務器拒絕寫入時,它將刪除錯誤緩存的數據,您應該看到相應的child_removed事件。