0

在我進入問題之前,我想爲您提供一些上下文。目前我有用戶和會話。用戶是您想到用戶時通常會想到的內容,但會話可以被認爲是會議。這些會議可以標記爲隱私,在這種情況下,我擁有Firebase數據庫安全規則,防止用戶閱讀和寫入會議,除非他們是會議的一部分。在應用程序邀請是獲得邀請的唯一方法(源自組織者)使用動態鏈接接受邀請

直到現在,這裏的問題:我想使用動態鏈接邀請用戶通過直接連接到會話邀請用戶,但是我不'不知道如何在數據庫安全規則中對此進行建模。

有沒有人有任何想法我會說:「從動態鏈接邀請來的任何人都可以邀請自己參加會議」?在這種情況下,我猜這個問題是我不知道用戶會邀請誰。

+0

當前提出的解決此問題的方法是生成一個隨機推送密鑰,我將其存儲在會話中並作爲查詢參數嵌入到動態鏈接中。 當用戶點擊鏈接時,應用程序打開,它將繼續提取隨機密鑰並將其推入數據庫中的前綴(例如linkInvites/{userId}/{pushKey})。 firebase規則將檢查此密鑰以決定用戶是否應該訪問會話。如果這有效,我會將其作爲答案發布。 – orrett3

回答

0

看起來我用我以前的評論解決了我自己的問題。我決定生成一個新的推送密鑰並使用動態鏈接分發密鑰。

這在數據庫中看起來像什麼?
我創建了火力點的路徑,以保持會話的隨機密鑰:

dynamicInvites/sessions/{sessionId} 
"somerandomkey" 

和路徑持有分發給用戶

dynamicInvites/users/{userId} 
{ 
    "somerandomkey": {timestamp} 
} 

另外的關鍵有一些說會話安全規則會話X的X和隨機密鑰不能被讀取,除非用戶A具有會話X的隨機推送密鑰,或者他們是會話的成員。

你是如何分配鑰匙的?
由於會話用戶有權訪問隨機密鑰,因此可以使用隨機密鑰和sessionId作爲查詢字符串生成動態鏈接。

當用戶單擊鏈接時,它們被重定向到應用程序,該應用程序從鏈接中提取隨機密鑰和會話標識,並將隨機密鑰與當前時間一起放入其動態提示用戶路徑下,然後使用會話打開會話ID。當我想執行某些類型的定期清理這些鍵時,將使用當前時間。

爲什麼使用單獨的按鍵而不是會話中的按鍵?
會話的推送鍵在數據庫中的多個位置,因爲它可能會加載到客戶端,所以不被視爲私有。

表演在應用程序啓動一個數據庫更新不是用戶友好的,雖然
我當用戶點擊該鏈接使用閃屏掩蓋這段時間。由於我在正常啓動時有一個啓動畫面,這是用戶期望的正常行爲。