Firestore安全规则设为禁止读取,为何仍返回全部wallets文档?
Firestore安全规则失效问题分析
你遇到的问题是设置了allow read, write: if false的安全规则,但仍能读取所有wallets文档,可能由以下几种原因导致:
1. 客户端缓存残留旧数据
Firebase Firestore客户端会自动持久化缓存已读取的数据,当你更新安全规则后,客户端可能直接读取本地缓存,而非向服务器请求最新权限验证结果。
- 解决方式:清除App的本地缓存(或卸载重装App),强制客户端重新从服务器拉取数据并验证规则。
2. 当前登录用户为项目管理员
Firebase项目的所有者、编辑者、管理员账号默认绕过所有安全规则,无论规则如何配置都能读写数据。
- 解决方式:切换到普通认证用户账号进行测试,避免使用项目控制台的管理员账号登录App。
3. 安全规则未完成部署
修改规则后必须将其部署到Firebase服务器才会生效,仅在本地修改规则文件不会影响线上行为:
- 检查Firebase控制台 → Firestore → 规则页面,确认显示的是你设置的
allow read, write: if false;规则 - 如果使用CLI部署,确保执行过
firebase deploy --only firestore:rules命令,且部署日志显示成功。
4. 客户端连接了Firestore模拟器
若开发时启用了Firestore模拟器,模拟器默认不启用安全规则(或使用单独配置的模拟器规则),导致读取操作不受限制:
- 检查代码中是否存在类似
firestore().useEmulator('localhost', 8080)的配置,注释该代码后连接生产环境Firestore再测试。
验证步骤
- 确认Firebase控制台的规则已更新并生效
- 使用普通用户账号登录App,清除缓存后重启
- 重新测试读取
wallets集合的操作,确认是否返回空数据
内容的提问来源于stack exchange,提问作者zcb
相关产品推荐
相关产品推荐

