firebase - Firestore 安全规则拒绝对 firebase-storage 进行读/写

标签 firebase firebase-storage firebase-security

尝试向存储添加安全规则。当我添加安全规则以确保仅允许经过身份验证的用户进行读/写时,模拟器正在工作。但是当我尝试对文件大小添加另一个约束时,我遇到了错误。

以下是安全规则:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null && request.resource.size < 5 * 1024 * 1024;
    }
  }
}

我在 files\ 下有文件 我在模拟器中收到以下错误:

Simulated read denied

错误详细信息:

Error: simulator.rules line [4], column [29]. Property resource is undefined on object.

如果我也尝试模拟写入,则会出现问题。

编辑1:重要

好的!我发现this问题并尝试在那条线上进行一些实验,并让模拟器允许读/写!我做了以下更改:

allow read, write: if request.auth != null && (request != null 
                                                || request.resource.size < 5 * 1024 * 1024);

这基本上是我添加了一个空检查。所以,目前我还不清楚这里发生了什么!

最佳答案

我可以使用类似的规则来解决这个问题

    match /users/{uid}/{document=**} {
      allow read, create, update: if
          request.auth != null &&
          request.auth.uid == uid &&
          (!("resource" in request) || request.resource.data.uid == request.auth.uid);
    }

在本例中,我想确保更新中的“uid”属性与用户的 uid 匹配。但是,如果在模拟器中您不首先执行“构建文档”,则 request.resource 未定义(我认为这是一个错误;它应该被定义,但 null国际海事组织)。

我相信这实际上只适用于模拟器,而不是现实的场景,因为创建/更新请求将始终包含一个文档,甚至是一个空文档。但我想我会把它保留在我的规则中以防万一。

关于firebase - Firestore 安全规则拒绝对 firebase-storage 进行读/写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310699/

相关文章:

firebase - 在 React Native 一段时间后删除通知(@react-native-firebase/messaging)

javascript - 获取 Firebase 存储引用时出现问题

firebase-storage - 它是一种在 Firebase 存储中备份数据的方法吗?

javascript - 让客户端创建用户但在通过身份验证之前不修改

firebase - 如何降级 firebase 版本?

reactjs - 从 Firestore 获取数据

javascript - Cloud Functions for Firebase onWrite 超时

android - 如何解决 java.lang.IllegalStateException : Task is not yet complete Error when uploading image to Firebase storage?

群组的 Firebase 存储安全规则

angularjs - 如何捕获 firebase、Angularfire 中的安全规则失败?