【问题标题】:How to calculate Firebase storage consumption per user?如何计算每个用户的 Firebase 存储消耗?
【发布时间】:2021-08-25 17:16:29
【问题描述】:

我正在构建一个桌面应用程序并使用 Firebase SDK。我正在使用 Firebase 的实时数据库和存储服务进行实验。实时数据库包含所有元数据,存储包含实际文件。

数据库方案如下所示:

-+ users/
 |
 + -- + sd798f7a98dsf79879/ <-- user.uid
      |
      + -- + projects/
           |
           +---- Project1/
           |     ...
           +---- Project2/
                 ...

存储方案看起来很相似。在桌面应用程序中,我可以快速计算用户在存储中的所有文件的总大小,因为这些信息存储在实时数据库中。如果用户想上传比他的计划允许的更多的数据,我可以在客户端拒绝上传。

但这并不是 100% 安全的,因为这是一个可能被黑客入侵的客户端检查。我不太担心有人会暂时超过他的限制,但我想确保我可以使用软限制和硬限制。

鉴于我在桌面应用程序中使用数据库的情况,您能否推荐一种替代方法?

【问题讨论】:

  • “实时数据库”,又名 Firebase V1,是一个笑话,它是遗留问题。您实际上无法将其用于任何事情!他们没有删除它的唯一原因是这对公司来说会很尴尬。你必须使用普通的新的,他们称之为“firestore”。
  • 感谢您的意见!谁能证实这一点?对我来说,这真的不像是个玩笑。它完全符合我的需要,而且似乎工作可靠
  • firebase.google.com/docs/database/rtdb-vs-firestore 主要考虑因素是让我返回“实时数据库”以满足我的所有要求
  • firebaser here Firestore 不是实时数据库的替代品,实时数据库在许多大型项目中大量使用,并且仍在积极开发,并且是许多案例的更好选择(例如 2020 年的 this Google Doodle)。遵循数据库推荐器是获得关于哪个数据库最适合您的用例的指导的好方法。
  • @FrankvanPuffelen 非常感谢您的评论并感谢您的确认。如前所述,我对实时数据库的印象与第一个评论者截然不同。它开箱即用,完全符合我的需要。竖起大拇指!!

标签: firebase google-cloud-platform google-cloud-storage


【解决方案1】:

但这并不是 100% 安全的,因为这是一个可能被黑客入侵的客户端检查。

这是真的。您永远不应依赖客户端来更新此类数据。最简单的选择是将Cloud Storage Triggers 用于云函数,它将更新数据库中图像的大小。

如果用户超出配额,您实际上如何防止用户上传新文件?

最好的选择是将它们的总使用量存储在自定义声明中,并在 Firebase 存储安全规则中读取。这样的规则应该有效:

allow write: if request.resource.size + request.auth.token.size < 10 * 1024 * 1024;

此规则将只允许用户上传总计 10 MB 的文件。如果声明尚未更新,则可能存在用户上传超过此限制的罕见情况。

您可以查看我对类似问题的回答之一:

How to limit total size of files that a user can upload to Firebase storage?


正如@FrankVanPuffelen 所评论的那样,自定义声明需要时间来传播,并且可能允许用户上传超过指定的限制。您绝对可以删除图像或撤销用户的刷新令牌(当前 ID 令牌仍保持活动状态),但这可能不利于用户体验。您还可以在用户尝试上传任何文件以防止它们被上传之前直接从实时数据库中读取总使用量。 这仍然可以被逆向工程。


如果您需要强制执行这些限制而没有这样的缺点,最好通过云功能或服务器上传图像,如果用户超过配额,它将拒绝上传请求。

【讨论】:

  • 谢谢!这正是我所需要的
  • 当前使用存储在自定义声明@Dharmaraj 中的有趣想法。我肯定会把用户的最大使用量放在那里,但不确定它是否最适合当前使用量。由于声明传播到客户端(并从那里传播到安全规则)最多需要一个小时,因此规则中的 token.size 经常不包括最近的上传,因此报告不足/允许过多。
  • 谢谢@FrankvanPuffelen。我完全忽略了这个事实。我已经更新了答案。还提交了设置最大文件夹大小限制的功能请求:)
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 2020-11-02
  • 2011-09-05
  • 2019-04-19
  • 1970-01-01
  • 2019-08-10
  • 2014-02-16
相关资源
最近更新 更多