Firebase Storage规则不生效:UID与bucketName匹配仍被拒绝
问题分析与解决方法
你的Firebase Storage规则失效的核心原因是路径占位符匹配错误:
你当前的规则中,match /{bucketName}/{allPaths=**} 里的{bucketName}会匹配请求URL路径的第一个分段——也就是字符串"b"(对应请求路径里的/b/...),而不是你以为的bucket名称(projectname.appspot.com)。这就导致request.auth.uid == bucketName的条件永远不成立(UID是ibpxtIOZF8a21M51NvTgO4F3CyT2,和"b"完全不相等)。
正确的规则写法(针对你的需求)
从请求路径看,你是把文件存在了以用户UID为根目录的路径下(ibpxtIOZF8a21M51NvTgO4F3CyT2/backup.txt),对应的正确规则应该匹配文件路径中的UID分段:
service firebase.storage { match /b/{bucket}/o/{userUid}/{allPaths=**} { allow read, write: if request.auth.uid == userUid; } }
规则说明:
/b/{bucket}/o/是Firebase Storage路径的固定前缀,{bucket}会自动匹配你的实际bucket名称(比如projectname.appspot.com){userUid}会捕获文件路径中的第一个分段(也就是你的UID目录名)- 条件
request.auth.uid == userUid确保只有UID匹配的用户才能访问该目录下的所有文件
额外验证步骤
- 确认Flutter代码中上传/读取文件时,路径确实是
${userUid}/backup.txt格式(比如用当前登录用户的UID作为目录前缀) - 在Firebase控制台的规则模拟器中,使用正确的文件路径(比如
ibpxtIOZF8a21M51NvTgO4F3CyT2/backup.txt)重新测试,此时条件会判定为true
内容的提问来源于stack exchange,提问作者Gurmay Malvai
相关产品推荐
相关产品推荐

