Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firestore安全规则拒绝对firebase存储进行读/写操作_Firebase_Firebase Storage_Firebase Security - Fatal编程技术网

Firestore安全规则拒绝对firebase存储进行读/写操作

Firestore安全规则拒绝对firebase存储进行读/写操作,firebase,firebase-storage,firebase-security,Firebase,Firebase Storage,Firebase Security,正在尝试将安全规则添加到存储。当我添加一个安全规则以确保只有经过身份验证的用户才允许读/写时,模拟器正在工作。但是,当我尝试对文件大小添加另一个约束时,我遇到了一个错误 以下是安全规则: service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null && request.resource.s

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

以下是安全规则:

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

Error: simulator.rules line [4], column [29]. Property resource is undefined on object.
若我也尝试模拟写入,那个么问题就会发生

编辑1:重要

好的!我发现了这个问题,并尝试在这条线上做了一些实验,得到了允许读/写的模拟器!我做了如下更改:

allow read, write: if request.auth != null && (request != null 
                                                || request.resource.size < 5 * 1024 * 1024);
允许读、写:if request.auth!=null&(请求!=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匹配。但是,如果在模拟器中您没有首先执行“构建文档”,那么
请求.resource
是未定义的(我认为这是一个bug;应该定义它,但
null
IMO)

我相信这只适用于模拟器,这不是一个现实的场景,因为创建/更新请求总是包含一个文档,甚至是一个空文档。但我想我会遵守规则以防万一。

这对我来说很有效!这个(请求中的“资源”)语法为我澄清了问题
    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);
    }