Cloud Firestore
Google Firebase提供的NoSQL文档型云数据库,以集合-文档层级结构组织数据,支持实时监听与离线同步,适用于多端协作与实时应用场景
核心事实
时间轴 (近 90 天)
演示中数据库选用Cloud Firestore。
Firestore 安全规则不是过滤器,查询是全有或全无:只要一个查询可能返回哪怕一条用户无权读取的文档,整个查询就会失败
创建 Firestore 数据库时,Firebase 提供测试模式,授予所有用户访问权限,导致大量公开项目和教程从开放规则起步
正确的修复方式是规则绑定所有者(比较 request.auth.uid 与 resource.data.ownerId),并让查询显式携带 where('ownerId', '==', uid) 以匹配规则
if true 放行所有人,if request.auth != null 放行所有登录用户,只有比较 request.auth.uid 与文档中的所有者字段,才真正实现按用户隔离
在缺少匹配 where() 条件时,放宽安全规则并不能解决 Firestore 查询权限问题,只会掩盖问题
让 Firestore 权限报错消失的最快路径是拆掉规则防线,而真正原因通常藏在查询语句里
Cursor 和 Claude Code 这类 AI 编辑器在遇到 Firebase 的 'Missing or insufficient permissions' 错误时,常见的修复方式是将 firestore.rules 改成 allow read, write: if true; 或 if request.auth != null;
allow read, write: if true; 规则意味着任何知道 project ID 的人都能读取、修改或删除 Firestore 中的每个文档
allow read, write: if request.auth != null; 规则相当于任何注册用户都能读写整个数据库,Firebase 官方将其列为不推荐用法
还有 6 条时间轴事件
全部知识事实 (16)
Cloud Firestore是一种NoSQL文档数据库,单字段查询可自动索引,但包含多字段过滤或排序的复合查询必须手动创建复合索引
65%待验证演示中数据库选用Cloud Firestore。
50%待验证在缺少匹配 where() 条件时,放宽安全规则并不能解决 Firestore 查询权限问题,只会掩盖问题
50%待验证if true 放行所有人,if request.auth != null 放行所有登录用户,只有比较 request.auth.uid 与文档中的所有者字段,才真正实现按用户隔离
50%待验证让 Firestore 权限报错消失的最快路径是拆掉规则防线,而真正原因通常藏在查询语句里
50%待验证Cursor 和 Claude Code 这类 AI 编辑器在遇到 Firebase 的 'Missing or insufficient permissions' 错误时,常见的修复方式是将 firestore.rules 改成 allow read, write: if true; 或 if request.auth != null;
50%待验证allow read, write: if true; 规则意味着任何知道 project ID 的人都能读取、修改或删除 Firestore 中的每个文档
50%待验证allow read, write: if request.auth != null; 规则相当于任何注册用户都能读写整个数据库,Firebase 官方将其列为不推荐用法
50%待验证Firestore 安全规则不是过滤器,查询是全有或全无:只要一个查询可能返回哪怕一条用户无权读取的文档,整个查询就会失败
50%待验证project ID 不是秘密,在 if true 规则下攻击者只需一条 curl 命令即可获取全部订单集合,无需 key 或 token
50%待验证创建 Firestore 数据库时,Firebase 提供测试模式,授予所有用户访问权限,导致大量公开项目和教程从开放规则起步
50%待验证正确的修复方式是规则绑定所有者(比较 request.auth.uid 与 resource.data.ownerId),并让查询显式携带 where('ownerId', '==', uid) 以匹配规则
50%待验证Firestore 安全规则可通过 firebase deploy --only firestore:rules 单独推送,不影响应用代码
50%待验证AI Studio 的 Agent 会自动生成包括 Cloud Firestore 代码、认证代码、/src/lib/firebase.ts 文件和 Firestore Rules 文件的后端代码
50%待验证Firestore缺少复合索引时不会查不到数据,而是会触发全集合扫描,因Firestore按读取文档数计费,数据量增大后会产生额外成本
50%待验证Firestore缺少索引的报错信息会直接附带创建该索引的控制台链接
50%