【问题标题】:Is it possible to set storage rules using firestore of Firebase?是否可以使用 Firebase 的 firestore 设置存储规则?
【发布时间】:2018-08-09 17:45:43
【问题描述】:

所以我正在尝试将规则设置到存储中,但我需要访问 firestore 才能正确设置。

这是我的例子:

在我的 Firestore 数据库中,我有一个 users 集合,其中有一个名为 items 的集合。路径如下所示:/users/items/{itemId}

我希望用户可以使用此路径读取文件并将其写入存储:/items/{id}/file.png 仅当项目的 {id} 已存在于 firestore 数据库的 items 集合中时。 有没有办法使用 firestore 将规则正确设置到存储中?

我试过了:

service firebase.storage {
  match /b/{bucket}/o {
    match /items/{item}/{allPaths=**} {
        allow read, write: if exists(/databases/{database}/documents/users/$(request.auth.uid)/items/$(item));
    }
  }
}

但这不起作用:/

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    一个 Firebase 产品的安全规则无法引用另一个 Firebase 产品。性能影响太大了。

    如果您需要这种产品间一致性,您可能需要考虑从 Cloud Functions 进行写入。虽然这不会突然允许跨产品的安全规则,但这确实意味着您要确保您的代码在执行写入操作,并且代码运行在比普通用户的手机或手机更可靠的环境中个人电脑。

    【讨论】:

    • 好的,我来看看 Cloud Functions。谢谢你的回答! :)
    • 这很有帮助。但是,如果您通过 Cloud 功能将图像上传到 Firebase Storage,那将如何工作?然后,我必须先将图像文件或声音文件上传到 Cloud Function。我知道您可以将图像转换为长字符串,然后将其上传到云函数,但是还有其他更有效、更好的方法吗?我担心如果我不将上传仅通过云功能完成,黑客可能会将数十亿张图片上传到我的云存储中。这种担心有必要吗?
    • 嗨弗兰克,三年后我也有同样的问题。我想将图像上传到用户配置文件(在存储中),但我需要检查用户是否是要授权的配置文件所有者,答案位于 Firestore 中(例如所有者 = uid)。 3年后有新的方法吗?另一种方法是将配置文件的路径设置为与用户的 uid 相同(这样我可以检查是否 path = 发出请求的用户的 uid)。但是每个人都知道其他用户的用户 uid 是一个安全问题吗?谢谢。
    • 这里没有任何变化。知道用户的 UID 没有安全风险。见stackoverflow.com/questions/37221760/…
    猜你喜欢
    • 2020-07-23
    • 2020-04-10
    • 2021-07-19
    • 2020-07-03
    • 2021-09-16
    • 1970-01-01
    • 2021-04-04
    • 2019-12-15
    相关资源
    最近更新 更多