我将flutter与Firebase一起使用来保存我的图像,并且我将我的应用程序用作经过身份验证的Firebase用户。
规则第一个用例:
rules_version = '2';
firebase.storage service {
match / b / {bucket} / o {
match / {allPaths = **} {
allow read, write: if true;
}
}
}
在这里,为了显示图像,我可以使用照片的下载网址:await ref. getDownloadURL();
示例:https://firebasestorage.googleapis.com/v0/b/project_name/o/images/image_name.jpg?alt=media
规则第二个用例:
rules_version = '2';
firebase.storage service {
match / b / {bucket} / o {
match / {allPaths = **} {
allow read, write: if request.auth! = null;
}
}
}
在这里我可以使用await ref. getDownloadURL();
但我不能使用图像url(硬编码)
我的问题:
如果ref. getDownloadURL()
即使在私人浏览器中也可以访问,并且不需要经过身份验证的用户,但是即使您是Firebase身份验证的用户,也无法访问图像的url(没有令牌),为什么我们使用Firebase存储规则(if request.auth!=null;)?
这就是下载URL的工作方式。它们旨在绕过所有安全规则。规则仅适用于使用FirebaseSDK读写存储桶中数据的Web和移动应用程序中运行的代码。如果您不想完全公开访问文件,请不要使用下载URL。