无认证的只读校园App触发Firebase权限错误该如何配置规则?
无认证只读类Firebase App安全规则配置方案
适配你场景的基础规则配置
你当前的需求为客户端全只读、无用户登录逻辑,核心需要完成两个配置:完全关闭所有客户端写入权限,同时开放公开数据的无认证读取权限,规则如下:
service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read: if true; allow write: if false; } } }
更安全的优化配置(推荐使用)
上述通配符规则会开放所有集合的读取权限,如果你存在内部使用的非公开集合,建议精确匹配你实际用到的公开集合,避免不必要的数据泄露风险,示例如下(可根据你实际的集合名称调整):
service cloud.firestore { match /databases/{database}/documents { // 开放帖子集合读取权限 match /posts/{postId} { allow read: if true; } // 开放班车时刻集合读取权限 match /shuttle_schedules/{scheduleId} { allow read: if true; } // 开放首页配置数据读取权限(对应你报错里的users/h0m3_p4g3_路径) match /users/h0m3_p4g3_ { allow read: if true; } // 全局关闭所有客户端写入权限 match /{document=**} { allow write: if false; } } }
原报错原因说明
- 你之前配置的
allow read, write: if request.auth != null;要求所有请求必须携带用户认证信息,而你的APP没有对接登录功能,所有请求都没有auth字段,所以直接触发PERMISSION_DENIED权限错误 - 你看到的超时断开错误是权限被拒绝后,Firestore长连接监听被主动断开的衍生报错,权限问题解决后会自动消失
额外安全提示
- 如果你需要后台更新数据,直接使用Firebase Admin SDK操作即可,Admin SDK拥有全量权限,不受客户端安全规则限制,不需要为了后台操作开放客户端写入权限
- 如果后续需要添加管理员端操作功能,建议对接Firebase匿名认证/自定义认证,配合安全规则的自定义声明判断管理员身份,不要直接开放写入权限
内容的提问来源于stack exchange,提问作者Alper Efe Sahin
相关产品推荐
相关产品推荐

