修改Firebase数据库规则后出现permission-denied错误该如何调整代码
问题原因
你设置的读权限规则要求请求必须携带已登录的用户鉴权信息,且对应用户的uid必须等于你配置的xxxxstatic_idxxxx,你目前只完成了Firebase SDK的初始化,没有执行用户登录操作,请求没有带上合法的auth信息,所以触发权限拒绝。
代码调整步骤
- 首先确认你使用的Firebase Auth登录方式,这里以邮箱密码登录为例,你需要在发起数据库读请求前,先完成对应uid账号的登录:
// 初始化完成后先执行登录 firebase.auth().signInWithEmailAndPassword(你的账号邮箱, 你的账号密码) .then((userCredential) => { // 登录成功后再发起数据库读请求 const user = userCredential.user; // 可先打印确认当前登录用户的uid和你规则里的静态值完全一致 console.log("登录用户uid:", user.uid); // 之后再执行你的数据库读操作即可,示例如下 firebase.database().ref('你要读取的节点路径').once('value') .then(snapshot => console.log(snapshot.val())) }) .catch((error) => { console.error("登录失败:", error.code, error.message); });
- 额外校验点:
- 确认你规则里写的静态uid和你登录账号的uid完全一致,没有拼写错误
- 确认你没有开启Firebase数据库的测试模式过期限制
- 如果你用的是匿名登录,要确认匿名用户的uid和你规则里的静态值匹配
开发环境临时测试方案(禁止用于生产环境)
如果只是临时调试业务逻辑,可以暂时把读规则改成下面的写法跳过鉴权校验,调试完成后再恢复正式规则:
"rules": { ".read" : "auth == null || auth.uid=='xxxxstatic_idxxxx'", ".write" : true }
内容的提问来源于stack exchange,提问作者Tejahshri
相关产品推荐
相关产品推荐

