【问题标题】:Firebase allow users to access with a secret keyFirebase 允许用户使用密钥进行访问
【发布时间】:2021-11-13 17:38:14
【问题描述】:

我想通过电子邮件向用户发送一个链接以提交反馈。

该链接具有每个用户唯一的访问密钥。

如果访问密钥有效,用户应该能够提交。

这在 Firebase 上怎么可能?

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-authentication


    【解决方案1】:

    最简单的方法是:

    1. 为每个用户生成密钥。
    2. 已经创建了一个(可能是空的)文档,其中密钥作为文档 ID
    3. 将密钥发送给用户
    4. 仅当该文档已存在时才允许更新该文档。所以允许update,但不允许来自granular security rulescreate
    5. 不允许用户list 集合中的文档,尽管您可以允许他们get 他们。

    在第 2 步中,您还可以将目标用户的 UID 写入文档,并在您的安全规则中对其进行额外检查。

    另见:

    * Firestore rules: Allow access to a document using password

    【讨论】:

    • 这意味着我需要将此文档与它提供反馈的文档保持同步。否则,每次我需要为文档提取反馈时,我都必须进行两次阅读。 -- 怎么样,创建一个验证密钥并返回我在安全规则中验证的自定义 JWT 令牌编码访问权限的云函数。这有意义吗? -- 这需要使用自定义 JWT 令牌在应用程序上调用 signInWithCustomToken,以注销现有会话?是否可以保留现有用户会话并传递自定义令牌?
    • 我需要确保此云功能仅供应用使用。这里的 CORS 安全性是否足够?
    • “这意味着我需要将此文档与它提供反馈的文档保持同步。否则,每次我需要为文档提取反馈时,我都必须阅读两次。”据我所知,唯一的阅读是用户所做的。你在哪里看到另一个?可能也可以使用 Cloud Functions,但我描述的方法非常惯用,不需要服务器端组件(如果需要,您可以在开发机器上运行步骤 1-3)。
    • 对文档的反馈。我只想在他们有密钥的情况下在反馈页面上显示一些文档信息。
    • 是的,这就是您在问题中解释的用例。我的回答中的方法非常习惯于在没有任何服务器代码的情况下实现它。我建议尝试一下。
    猜你喜欢
    • 2012-04-14
    • 2021-05-20
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2021-06-24
    • 2017-03-10
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多