获取'用户没有访问此对象的权限。代码:-13021 HttpResult:403'错误。请看细节

时间:2016-06-10 18:02:36

标签: android firebase firebase-realtime-database firebase-security

我正在尝试从FirebaseStorage下载一些图片。

虽然我通过谷歌验证用户,但我还是得到了这个 错误:

E/StorageException: StorageException has occurred. User does not have permission to access this object. Code: -13021 HttpResult: 403 

尝试下载图片时。

以下是规则:

service firebase.storage {
  match /b/appname-e3a12.appspot.com/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

有人得到了答案吗?

6 个答案:

答案 0 :(得分:3)

尝试

service firebase.storage {
    match /b/appname-e3a12.appspot.com/o {
        match /{allPaths=**} {
            allow read, write: if true;
        }
    }
}

答案 1 :(得分:1)

您的规则看起来不错,但如果您不确定,请尝试将allow read, write: if true;置于规则的根目录。

我遇到了同样的问题,我不知道您尝试从哪个平台访问Firebase存储,但请检查代码中的引用样式。存储与数据库不同。 例如,在Android中,您应该访问如下文件:

StorageReference storageRef = FirebaseStorage.getInstance().reference().child("folderName/file.jpg");

不喜欢这样:

 StorageReference storageRef = FirebaseStorage.getInstance().reference().child("folderName").child("file.jpg");

您还应该阅读David East的这篇博文:5 tips for Firebase Storage

答案 2 :(得分:1)

出现同样的问题,仅允许读/写是不够的,您还应该在Firebase控制台/身份验证/ SIGN0IN METHOD选项卡下启用匿名帐户,然后才能运行。

答案 3 :(得分:1)

您是否尝试使用Firebase的默认规则?

service firebase.storage {
    match /b/<your-firebase-storage-bucket>/o {
       match /{allPaths=**} {
          allow read, write: if request.auth != null;
       }
    }
}

希望这有帮助!

答案 4 :(得分:0)

我正在添加此答案,希望对Firebase中的某人有帮助:

  1. 转到“存储”

  2. 选择“规则”标签,然后按如下所示编辑规则:

    service firebase.storage {
       match /b/{bucket}/o {
         match /{allPaths=**} {
           // Allow access by all users
           allow read, write: if request.auth != null;
         }
       }
     }
    

注意:请确保您具有与上述完全相同的名称,请勿将{bucket}替换为您的项目名称。

祝您编程愉快!

答案 5 :(得分:-1)

将数据库规则更新为:

service firebase.storage {
      match /b/{bucket}/o {
        match /{allPaths=**} {
           allow read, write;
        }
       }
    }

只需删除此部分:if request.auth == null