如何修复Firebase Realtime Database管理员写入权限规则始终返回false问题
问题原因
你配置的规则中存在变量引用语法错误:
- 原
CATEGORIES节点的写入规则里,auth.uid被单引号包裹,被系统识别为固定字符串"auth.uid",而非动态获取当前登录用户uid的内置变量,因此永远无法匹配到ADMIN节点下的真实uid子节点,校验始终返回false。 - 原规则还存在多余尾逗号的JSON语法问题,也可能导致规则解析异常。
修复后的规则
{ "rules": { "USERS": { ".read": "auth != null", ".write": "auth != null" }, "CATEGORIES":{ ".read": "auth != null", // 去掉auth.uid外层的引号,让它作为变量被解析 ".write": "root.child('ADMIN').child(auth.uid).exists()" }, "ADMIN": { // 额外提示:原配置允许所有人读写ADMIN节点存在极高安全风险,建议按需收紧权限,如下配置仅管理员可读写ADMIN节点 ".read": "auth != null && root.child('ADMIN').child(auth.uid).exists()", ".write": "auth != null && root.child('ADMIN').child(auth.uid).exists()" } } }
修复后只要登录用户的uid存在于ADMIN节点的子节点key中,就可以正常写入CATEGORIES节点。
内容的提问来源于stack exchange,提问作者Technical Art
相关产品推荐
相关产品推荐

