使用动态链接接受邀请

Using Dynamic Links to Accept Invites

在讨论我遇到的问题之前,我想为您提供一些背景信息。目前我有用户和 sessions。当您想到用户时,通常会想到用户,但是 sessions 可以被认为是会议。这些会议可以标记为私人会议,在这种情况下,我制定了 Firebase 数据库安全规则,防止用户读取和写入会议,除非他们是会议的一部分。应用内邀请是获得邀请的唯一方式(来自组织者)

直到现在,问题是:我想使用动态链接通过直接链接到 session 来邀请用户加入 session,但是我不知道如何建模这在数据库安全规则中。

有谁知道我会怎么说:"Anyone that was invited here from a dynamic link has access to invite themselves to a session"?在这种情况下,我想问题是我不知道用户会邀请谁。

看来我使用之前的评论解决了自己的问题。我决定生成一个新的推送密钥并使用动态 links.

分发密钥

这在数据库中是什么样子的?
我在 firebase 中创建了一个路径来保存会话的随机密钥:

dynamicInvites/sessions/{sessionId}
"somerandomkey"

以及保存分发给用户的密钥的路径

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

此外,还有一些安全规则规定除非用户 A 拥有会话 X 的随机推送密钥或者他们是会话的成员,否则无法读取会话 X 和会话 X 的随机密钥。

你是怎么分发密钥的?
由于会话的用户可以访问随机密钥,因此他们可以使用随机密钥和 sessionId 作为查询字符串生成动态 link。

当用户单击 link 时,他们将被重定向到应用程序,该应用程序从 link 中提取随机密钥和会话 ID,并将随机密钥与当前用户路径一起放在他们的 dynamicinvites 用户路径下时间,然后使用会话 ID 打开会话。当前时间用于我想要对这些键执行某种类型的定期清理的事件。

为什么使用单独的按键而不是会话中的按键?
会话的推送密钥位于数据库中的多个位置,并且不被视为私有,因为它可能会加载到客户端。

虽然在应用程序启动时执行数据库更新对用户来说并不友好
这次我在用户单击 link 时使用启动画面进行了屏蔽。由于我在正常启动时有启动画面,这是用户期望的正常行为。