Firebase存储安全规则读取异常

时间:2019-07-17 18:34:45

标签: firebase firebase-storage firebase-security-rules

我遇到无法解决的Firebase存储问题。

我已经上传了jpg和pdf文档,并使用getDownloadURL和refFromURL函数获得了HTTPS URL。我还使用refFromURL获得了存储位置(gs:// pathToDoc)参考,并将它们全部存储在Firestore表中。

我可以使用不同的规则(如下所示)写入存储文档文件夹,但是经过身份验证的“读取”方法会引起问题。

refFromURL函数中的

GS : 这会返回Google的错误信息,“不匹配任何文档。      例如:gs:// my-name.appspot.com/ docs_folder /doc_name.pdf

getDownloadURL函数的HTTPS : 据我所知,它以不可猜测的URL字符串向世界开放,但是我不希望经过身份验证的用户以外的任何人查看此消息,因此这不是一种选择。      示例:https://firebasestorage.googleapis.com/v0/b/my-name.appspot.com/o/docs_folder%2Fdoc_name.pdf?alt=media&token=a7d8ff9h-0a85-4d8e-b434-b3h4fg58nfe8

来自refFromURL函数的HTTPS : 使用“ allow:if read”时,我可以阅读;因此,我知道文档参考很好,但是当我尝试使用下面的身份验证方法(一次)读取它们时,会收到“ 403权限被拒绝”的信息。这些规则在Simulation和Firestore规则中均能完美运行,因此我不明白为什么它们在Storage中不起作用!      示例:https://firebasestorage.googleapis.com/v0/b/my-name.appspot.com/o/docs_folder%2Fdoc_name.pdf?alt=media

通过应用程序中的链接调用该文档,只有拥有admin的自定义声明的用户才能访问该文件。

服务firebase.storage {   匹配/ b / {bucket} / o {

function isAdminUser(){    在[中返回request.auth.uid         “ ABC1234JHnndj877999”     ]; }

 match /docs_folder/{allDocs=**} {

     THESE WORK:
       allow write: if request.auth.uid == " ABC1234JHnndj877999"; 
       allow write: if request.auth != null && isAdminUser(); 
       allow write: if isAdminUser();
       allow write: if request.auth.token.admin == true;
       allow write: if request.auth.token.email == "pg@fg.com";  
       allow write: if request.auth.token.email.matches('.*fg[.]com$'); 
       allow read;

      THESE DON’T WORK!
       allow read: if request.auth.uid == " ABC1234JHnndj877999…"; 
       allow read: if request.auth != null && isAdminUser();
       allow read: if isAdminUser(); 
       allow read: if request.auth.token.admin == true;
       allow read: if request.auth.token.email == "pg@fg.com";  
       allow read: if request.auth.token.email.matches('.*fg[.]com$'); 
}

} }

我需要能够保护机密文档,因此我需要身份验证规则来限制访问,除了“ 403权限被拒绝”之外,我没有收到其他错误消息,并且如上所述,模拟读取可以正常工作,所以我卡住了!

0 个答案:

没有答案