You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中Firebase子节点值获取失败,权限跳转功能异常

解决Firebase数据库子节点值获取失败导致权限跳转失效的问题

嘿,我帮你揪出问题所在啦!你的代码里有两个核心问题,导致没法正确获取用户的Role字段来做跳转判断:

问题1:错误地把查询对象当作布尔值判断

你现在写的if (adaRef.orderByChild("Role").equalTo("admin"))只是创建了一个Firebase查询对象,并没有真正发起请求去数据库拉取数据。在JavaScript里,对象本身是“真值”,所以这个条件永远会成立,不管用户实际角色是什么,都会跳去DB.html。

问题2:缺少异步数据获取的处理

Firebase的数据库操作都是异步的,你不能直接同步获取数据,必须通过回调或者Promise来处理返回的快照数据。

修正后的代码

我给你调整了代码,加上了正确的异步数据获取逻辑,还补了一些边界处理:

function sontinue() {
  // 先确认用户已登录,避免uid为空的情况
  var user = firebase.auth().currentUser;
  if (!user) {
    location.href = "index.html";
    return;
  }

  var uid = user.uid;
  var userRef = firebase.database().ref("User/" + uid);
  
  // 用once('value')单次获取用户数据快照
  userRef.once('value').then(function(snapshot) {
    var userData = snapshot.val();
    // 确认数据存在且Role匹配admin
    if (userData && userData.Role === "admin") {
      location.href = "DB.html";
    } else {
      location.href = "index.html";
    }
  }).catch(function(error) {
    // 处理数据读取失败的情况(比如权限不足)
    console.error("读取用户数据出错:", error);
    location.href = "index.html";
  });
}

额外需要检查的点

  • 数据库安全规则:确保你的Firebase数据库规则允许已登录用户读取自己的节点,比如:
{
  "rules": {
    "User": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

如果规则设置不对,会导致数据读取失败,控制台会有报错。

  • 数据库节点结构:确认User/[你的用户uid]节点下确实存在Role字段,并且值是字符串"admin"(注意大小写!Firebase是大小写敏感的,比如Admin和admin会被当作不同值)。

内容的提问来源于stack exchange,提问作者Arfandra Rezky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:17:47