【问题标题】:How can I setup Firebase Storage rules to check parameters in Firebase Database?如何设置 Firebase 存储规则以检查 Firebase 数据库中的参数?
【发布时间】:2020-03-30 17:15:54
【问题描述】:

我在 Firebase 中有以下数据结构

Firebase 数据库

House/(id)/Viewers/(UID)/{
    startdate = “Dec 1, 2019”
    endData = “Dec 8, 2019”
}

Firebase 存储

House/(id)/SensitiveImages/sensitiveImage.png

我想在 Firebase 存储中编写一条规则,如果用户 UID 在查看者列表中并且当前时间在 startDate 和 endDate 之间,则仅允许访问 SensitiveImages 文件夹。但是,无法从 Firebase 存储规则内部访问此信息。我该怎么做?

【问题讨论】:

标签: firebase google-cloud-firestore firebase-storage firebase-security


【解决方案1】:

一种可能性是编写一个云函数作为图像请求的“处理器”。我们可以公开一个云函数作为图像的代理,而不是直接访问图像。然后,云函数可以使用当前日期和请求者身份以及存储在数据库中的数据来评估表达式。如果允许,则 Cloud Function 可以返回 Cloud Function 有权访问的原始数据。

作为返回数据的云函数的替代方案,云函数可以返回可用于访问数据的 URL。这可能是来自 Google Cloud Storage 的 signed url,它将仅授予该 URL 的拥有者访问权限,并且还会有时间限制以防止过期后的访问。

【讨论】:

  • 感谢您的回答。我为此写了一些伪代码,它让我意识到这有一些缺陷。您的第一种方法的缺陷是它需要客户端每次都下载图像。对于我的应用程序,这将是对带宽的巨大浪费。第二种方法的缺陷是,如果开始/结束日期发生变化,签名的 url 在新的开始/结束日期之外仍然有效。您知道解决这些问题的任何方法吗?
  • 你好 Cameron ... 每次都没有关注客户端下载 ... 这是您想要在本地存储图像的 Android 应用程序吗?对于签名 URL 概念,我们可以使有效 URL 的持续时间非常短……例如 1 分钟。这将足够一次检索图像。然后,考虑到当前允许访问的日期,我们可以为每个请求重新创建一个新的签名 URL?基本上忽略了signed-url timeout的概念,只是将它用于基于表达式评估的即时访问。
猜你喜欢
  • 2020-09-20
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 2020-03-04
  • 2018-12-19
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多