You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Storage权限持续被拒绝问题排查求助

排查Firebase Storage 403权限拒绝问题

问题详情

当前Firebase Storage规则

rules_version = '2';

// Craft rules based on data in your Firestore database
// allow write: if firestore.get(
//    /databases/(default)/documents/users/$(request.auth.uid)).data.isAdmin;
service firebase.storage {
  match /b/{bucket}/o {
    match /user/{userId}/{allPaths=**} {
      allow read,write: if request.auth.uid == userId;
    }
  }
}

Python上传代码

self.storage.child(self.uid + '/'+fNameonServer+'.png').put(self.path_here + '/dummy.png')

错误信息

File "C:\Users\bboyc\PycharmProjects\turtle\.venv\turtle_main.py", line 1140, in uploadImage
    self.storage.child(self.uid + '/'+fNameonServer+'.png').put(self.path_here + '/dummy.png')
File "C:\Users\bboyc\PycharmProjects\turtle\.venv\lib\site-packages\pyrebaselite\pyrebaselite.py", line 464, in put
    raise_detailed_error(request_object)
File "C:\Users\bboyc\PycharmProjects\turtle\.venv\lib\site-packages\pyrebaselite\pyrebaselite.py", line 511, in raise_detailed_error
    raise HTTPError(e, request_object.text)
requests.exceptions.HTTPError: [Errno 403 Client Error: Forbidden for url: https://firebasestorage.googleapis.com/v0/b/jost-19f5e.appspot.com/o?name=lKIp1f9k05RmwP6CRWo6qT2Bcir1/imgJustice.png] {
  "error": {
    "code": 403,
    "message": "Permission denied."
  }
}

用户说明:此前基于日期的存储规则下代码可正常运行,现在即使设置无限制规则也无法工作,目标是配置仅登录用户可访问的存储规则。


排查步骤

1. 修正存储路径匹配问题

你的规则要求文件必须放在/user/{userId}/路径下,但上传代码直接使用{uid}/文件名,缺少了user前缀,导致规则不匹配触发403。

解决方法:修改上传代码添加user/前缀:

self.storage.child('user/' + self.uid + '/' + fNameonServer + '.png').put(self.path_here + '/dummy.png')

或者调整规则去掉user前缀(不推荐,路径结构不够规范):

match /{userId}/{allPaths=**} {
  allow read,write: if request.auth.uid == userId;
}

2. 确认用户已完成认证

pyrebaselite需要确保当前用户已登录,否则request.auth.uid为空,规则验证失败。检查上传操作是否在登录完成后执行,确认self.uid是当前登录用户的有效UID。

可以在上传前添加调试代码验证:

print("当前用户UID:", self.uid)
print("是否已认证:", self.auth.current_user is not None)

3. 等待规则生效延迟

Firebase规则修改后可能需要2-3分钟全局同步,修改规则后等待一段时间再测试,避免因规则未生效导致的权限问题。

4. 手动传递认证令牌

部分轻量Firebase库可能存在认证信息未自动传递的问题,尝试在put方法中手动传入用户ID令牌:

user = self.auth.current_user
token = user['idToken']
self.storage.child('user/' + self.uid + '/' + fNameonServer + '.png').put(
    self.path_here + '/dummy.png',
    token=token
)

5. 测试无限制规则排查基础问题

临时设置完全开放的规则(测试后立即改回):

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if true;
    }
  }
}

如果此时仍报错,说明问题不在规则,而是代码或库配置问题,比如Storage桶名称错误、API密钥配置错误等。


内容的提问来源于stack exchange,提问作者MooNChilD Song

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:16:17