【问题标题】:Firestore Security Rule denying read/write on firebase-storageFirestore 安全规则拒绝对 firebase-storage 进行读/写
【发布时间】:2019-06-16 01:36:13
【问题描述】:

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

以下是安全规则:

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.

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

EDIT1:重要

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

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

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

【问题讨论】:

    标签: firebase firebase-storage firebase-security


    【解决方案1】:

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

        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 IMO)。

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

    【讨论】:

    • 这对我有用! !("resource" in request) 语法为我解决了问题
    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 2016-11-27
    • 1970-01-01
    • 2023-03-28
    • 2021-02-13
    • 2021-12-11
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多