【问题标题】:How to restrict firebase storage files only for the paid user?如何仅限付费用户使用 Firebase 存储文件?
【发布时间】:2020-12-15 15:09:26
【问题描述】:

我将文件存储在 Firebase 云存储中。此文件仅供付费用户下载。

如何设置安全规则以允许付费用户对该文件具有读取权限?

[更新]

我使用 Cloud Firestore 来存储用户集合 每个用户文档包含

  • uid
  • 电子邮件
  • 姓名
  • 照片网址
  • 提供者
  • 状态
  • stripeCustomerId
  • purchasedProducts

我可以通过查看购买的产品数组中是否存在产品来验证付费用户。

但是,在 Firebase 存储的安全规则中,我似乎无法访问其中的资源(用户集合)。还是我错过了什么?

谢谢

【问题讨论】:

  • 请编辑问题以显示您尝试过的方法无法按您的预期工作。您还应该解释“付费”对用户意味着什么。您如何在系统中表示这一点?这里可能有很多需要了解的活动部分。

标签: firebase firebase-storage firebase-security


【解决方案1】:

无法从 Firebase 存储的安全规则中访问 Cloud Firestore。

这意味着当前实现您的用例的唯一方法是:

  • 在用户的 ID 令牌中包含必要的信息,作为自定义声明,然后也是 available in security rules
  • 在您的安全规则中包含有关用户(可能是他们的 UID)的必要信息

由于第二种方法要求您为每个付费用户更新您的规则,因此并不常见。

可以通过Firebase Admin SDK 设置自定义声明,例如通过将支付信息写入 Cloud Firestore 时触发的 Cloud Function。

设置自定义声明后,它可能需要一个小时才能在客户端上可用,然后在安全规则中可用。原因是声明包含在 ID 令牌中,该 ID 令牌每小时仅进行一次身份验证刷新。如果你想get the updated claims sooner,你可以在客户端强制刷新用户的个人资料。

【讨论】:

  • 谢谢,弗兰克,我给你一杯啤酒。你救了我没有把头撞到墙上。 Firebase Auth 是否可以在不实施自定义身份验证的情况下附加自定义声明。 ?
【解决方案2】:

您可以尝试的另一种方法是在使用functions.storage.object().onFinalize webhook 上传文件后立即删除文件 - 在这里您可以访问数据库并检查是否允许用户上传文件。

尽管乍一看可能有点“骇人听闻”,但这实际上是一种预防措施——用户界面本身会限制“好”用户的上传。对于那些弄乱源代码并试图绕过系统的人,onFinalize 会做的工作。

【讨论】:

    猜你喜欢
    • 2021-04-28
    • 2017-03-26
    • 2023-03-29
    • 1970-01-01
    • 2020-10-18
    • 2019-07-19
    • 2018-08-30
    • 2020-10-18
    相关资源
    最近更新 更多