看起來我用我以前的評論解決了我自己的問題。我決定生成一個新的推送密鑰並使用動態鏈接分發密鑰。
這在數據庫中看起來像什麼?
我創建了火力點的路徑,以保持會話的隨機密鑰:
dynamicInvites/sessions/{sessionId}
"somerandomkey"
和路徑持有分發給用戶
dynamicInvites/users/{userId}
{
"somerandomkey": {timestamp}
}
另外的關鍵有一些說會話安全規則會話X的X和隨機密鑰不能被讀取,除非用戶A具有會話X的隨機推送密鑰,或者他們是會話的成員。
你是如何分配鑰匙的?
由於會話用戶有權訪問隨機密鑰,因此可以使用隨機密鑰和sessionId作爲查詢字符串生成動態鏈接。
當用戶單擊鏈接時,它們被重定向到應用程序,該應用程序從鏈接中提取隨機密鑰和會話標識,並將隨機密鑰與當前時間一起放入其動態提示用戶路徑下,然後使用會話打開會話ID。當我想執行某些類型的定期清理這些鍵時,將使用當前時間。
爲什麼使用單獨的按鍵而不是會話中的按鍵?
會話的推送鍵在數據庫中的多個位置,因爲它可能會加載到客戶端,所以不被視爲私有。
表演在應用程序啓動一個數據庫更新不是用戶友好的,雖然
我當用戶點擊該鏈接使用閃屏掩蓋這段時間。由於我在正常啓動時有一個啓動畫面,這是用戶期望的正常行爲。
當前提出的解決此問題的方法是生成一個隨機推送密鑰,我將其存儲在會話中並作爲查詢參數嵌入到動態鏈接中。 當用戶點擊鏈接時,應用程序打開,它將繼續提取隨機密鑰並將其推入數據庫中的前綴(例如linkInvites/{userId}/{pushKey})。 firebase規則將檢查此密鑰以決定用戶是否應該訪問會話。如果這有效,我會將其作爲答案發布。 – orrett3