Firebase Realtime Database修改规则报特殊字符错误如何解决?
报错原因
- 规则通配符使用错误:Firebase Realtime Database 规则中,路径通配符(比如
$uid这种代表动态变量的键)必须单独作为一级键名,不能和固定路径拼接在同一个字符串中,你把"some_path/${uid}"写为同一级键,触发了非法字符校验。 - JSON语法错误:你在规则结构中加入了
SHOWS ME ERROR IS HERE.这类不属于JSON合法语法的冗余内容,也会导致保存失败。 - 变量引用错误:实时数据库规则中认证用户的变量是
auth,不是Firestore规则里的request.auth,错误引用也会导致规则不生效。
安全告警原因
你当前临时使用的规则配置了全局".read": true,相当于整个数据库的所有数据对所有人开放,完全不符合最小权限原则,因此会触发官方的安全风险告警。
正确的规则配置
如果你要实现「some_path下对应用户的节点所有人可读,仅用户本人可写,其余路径默认禁止访问」的需求,使用以下配置即可:
{ "rules": { "some_path": { "$uid": { // 所有人可读,如需仅登录用户可读可改为 "auth != null" ".read": true, // 仅uid和节点名一致的登录用户可写 ".write": "auth != null && auth.uid == $uid" } }, // 全局默认规则:未显式配置的路径一律禁止读写,符合最小权限要求 ".read": false, ".write": false } }
该配置既符合实时数据库的规则语法,不会触发保存报错,也遵循了权限最小化原则,可以消除官方的安全告警。
内容的提问来源于stack exchange,提问作者Ozan
相关产品推荐
相关产品推荐

