Firebase Cloud Firestore权限疑问:未登录时权限不足问题
你的Firestore权限规则是否正确?
嘿,我来帮你捋捋这个问题~
先给你一个明确的结论:从你描述的实际行为来看,这个规则的表现完全符合它的逻辑,但它是否“正确”,取决于你想要的权限控制目标。
先拆解当前规则的作用
你现在的规则用了通配符 match /{document=**},这会匹配Firestore里所有的集合、子集合和文档,然后设置了核心条件:allow read, write: if request.auth != null;——简单说就是:
- 只有处于登录(认证)状态的用户,才能读取或写入任何数据;
- 未登录用户(
request.auth为null)完全没有读写权限。
这刚好解释了你遇到的现象:登录时能查看所有图片(满足request.auth != null的读权限条件),退出登录后触发“Missing or insufficient permissions”提示(因为request.auth为空,不满足读权限要求),完全是规则生效的正常结果。
那什么时候这个规则是“正确”的?
如果你的权限需求就是:仅登录用户可访问所有数据,未登录用户完全不能触碰任何数据,那这个规则是完全正确的,它完美实现了你的目标。
如果需要更精细的权限控制?
要是你有更具体的需求(比如登录用户只能看自己上传的图片,或者允许未登录用户看公开图片),那当前的通配符规则就太宽泛了,得针对性调整。举个例子,如果你想让登录用户能看所有图片,但只有图片所有者能上传/修改图片,可以改成这样:
service cloud.firestore { match /databases/{database}/documents { // 用户集合:仅用户本人能读写自己的信息 match /users/{userId} { allow read, write: if request.auth.uid == userId; } // 图片集合:登录用户可读所有,仅所有者可写 match /images/{imageId} { allow read: if request.auth != null; allow write: if request.auth != null && request.auth.uid == resource.data.ownerId; } } }
内容的提问来源于stack exchange,提问作者Dani




