我遇到无法解决的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权限被拒绝”之外,我没有收到其他错误消息,并且如上所述,模拟读取可以正常工作,所以我卡住了!