You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firebase Cloud Firestore权限疑问:未登录时权限不足问题

你的Firestore权限规则是否正确?

嘿,我来帮你捋捋这个问题~

先给你一个明确的结论:从你描述的实际行为来看,这个规则的表现完全符合它的逻辑,但它是否“正确”,取决于你想要的权限控制目标

先拆解当前规则的作用

你现在的规则用了通配符 match /{document=**},这会匹配Firestore里所有的集合、子集合和文档,然后设置了核心条件:allow read, write: if request.auth != null;——简单说就是:

  • 只有处于登录(认证)状态的用户,才能读取或写入任何数据;
  • 未登录用户(request.authnull)完全没有读写权限。

这刚好解释了你遇到的现象:登录时能查看所有图片(满足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

火山引擎 最新活动