Firebase 使用动态链接接受邀请

Firebase 使用动态链接接受邀请,firebase,firebase-realtime-database,firebase-security,firebase-dynamic-links,Firebase,Firebase Realtime Database,Firebase Security,Firebase Dynamic Links,在我开始讨论这个问题之前,我想给大家提供一些背景知识。目前我有用户和会话。当您想到用户时,通常会想到用户,而会话可以被认为是会议。这些会议可以标记为私人会议,在这种情况下,我制定了Firebase数据库安全规则,防止用户阅读和写入会议,除非他们是会议的一部分。应用内邀请是获得邀请的唯一方式(来自组织者) 到目前为止,问题是:我希望通过直接链接到会话来使用动态链接邀请用户参加会话,但是我不知道如何在数据库安全规则中对此进行建模 有没有人知道我会怎么说:“从动态链接被邀请到这里的任何人都有权邀请自己

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

到目前为止,问题是:我希望通过直接链接到会话来使用动态链接邀请用户参加会话,但是我不知道如何在数据库安全规则中对此进行建模


有没有人知道我会怎么说:“从动态链接被邀请到这里的任何人都有权邀请自己参加会议?”?在这种情况下,我想问题是我不知道用户将邀请谁。

看起来我用我以前的评论解决了我自己的问题。我决定生成一个新的按键,并使用动态链接分发该按键

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

dynamicInvites/sessions/{sessionId}
"somerandomkey"
以及保存分发给用户的密钥的路径

dynamicInvites/users/{userId}
{
  "somerandomkey": {timestamp}
}
此外,还有一些安全规则规定,除非用户A拥有会话X的随机按键或他们是会话的成员,否则无法读取会话X和会话X的随机密钥

您是如何分发密钥的?
由于会话用户可以访问随机密钥,因此他们可以生成一个动态链接,其中随机密钥和sessionId为querystring

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

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

在应用程序启动时执行数据库更新对用户不友好,但

这一次,当用户单击链接时,我使用了一个启动屏幕来屏蔽。由于我在正常启动时有一个启动屏幕,这是用户期望的正常行为。

目前提出的解决方案是生成一个随机按键,我将存储在会话中,并将其作为查询参数嵌入动态链接中。当用户单击链接时,应用程序打开,它将继续提取随机键并将其推入数据库中的前缀(例如linkInvites/{userId}/{pushKey})。firebase规则将检查此密钥,以决定用户是否应该有权访问会话。如果这个方法有效的话,我会把它作为一个答案发布。