Flutter已认证用户上传文件至Firebase Storage提示未授权如何解决
问题原因
- 安全规则未正确捕获路径中的用户UID变量
你的存储上传路径结构是/{用户UID}/profile.jpg,但当前规则用match /{allPaths=**}匹配全路径,规则条件中使用的userId变量没有被路径捕获声明,运行时变量无值直接导致授权校验失败。 - 规则中的逻辑与符号错误
你贴出的规则里逻辑与被转义成了&&,这是HTML转义后的无效字符,Firebase Storage规则无法识别该符号,会直接判定条件不成立。
解决方法
1. 修改Firebase Storage安全规则为以下内容
service firebase.storage { match /b/{bucket}/o { // 匹配 /{userId}/ 路径下的所有文件,捕获第一级路径为userId变量 match /{userId}/{allPaths=**} { allow read: if request.auth != null; allow write: if request.auth.uid == userId && request.resource.contentType.matches('image/.+'); } } }
2. 校验确认项
- 确认当前登录的用户确实已完成认证,
user.uid能正常获取且不为空 - 确认上传的文件确实是图片格式,和你设置的contentType匹配
- 修改规则后等待1-2分钟规则生效,再重新测试上传功能
内容的提问来源于stack exchange,提问作者abiieez
相关产品推荐
相关产品推荐

