使用orderByChild查询Firebase Realtime DB时Permission denied如何解决
问题原因
- 核心错误:你在构造查询的代码末尾额外调用了
.ref,这会丢弃前面所有orderByChild、equalTo的查询条件,回到/items根节点的普通引用。你请求的是无查询条件的根节点读权限,自然不符合你规则中要求的「必须按owner字段排序、且查询值等于当前用户uid」的约束,触发权限拒绝。 - 次要潜在问题:要保证执行查询时用户已经完成登录,
firebase.auth().currentUser不为空,否则规则中auth.uid != null的校验不通过也会返回权限错误。建议将查询逻辑放到onAuthStateChanged的回调中执行,避免登录未完成就触发查询。
你当前配置的安全规则本身符合需求,不需要修改,仅需要调整前端查询代码即可。
修正后的查询代码
// 移除末尾的.ref,直接使用构造好的Query对象监听数据 const itemQuery = firebase.database().ref("items").orderByChild("owner").equalTo(firebase.auth().currentUser?.uid); itemQuery.on('value', (v)=>{ console.log("ok: ", v.val()) }, (e)=>{ console.log("not allowed: ", e) })
内容的提问来源于stack exchange,提问作者Simon Tran
相关产品推荐
相关产品推荐

