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

如何基于Firebase实时数据库角色为用户与自由职业者设置独立登录跳转

问题解决方案

核心问题

你当前的代码仅判断了对应用户ID的数据库节点是否存在,没有读取节点内的角色字段做跳转逻辑区分,是无法实现预期效果的核心原因。
你的实时数据库结构参考:
数据库结构

修正后代码

假设你的Users节点下每个用户条目包含role字段,普通用户对应值为user、自由职业者对应值为freelancer,可根据你实际的字段名和值调整判断条件:

<script>
firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // 直接用回调返回的user实例取uid,无需重复获取currentUser
    const userID = user.uid;
    firebase.database().ref('Users/' + userID).once('value')
      .then(function(snapshot) {
        if (snapshot.exists()) {
          // 获取用户完整数据
          const userData = snapshot.val();
          // 判断角色字段跳转
          if (userData.role === 'user') {
            // 普通用户跳用户首页
            window.location.href = "index.html";
          } else if (userData.role === 'freelancer') {
            // 自由职业者跳对应首页
            window.location.href = "okay.html";
          }
        } else {
          // 无对应用户数据的兜底逻辑,比如跳回登录页
          window.location.href = "login.html";
        }
      })
      .catch(function(error) {
        // 捕获数据库读取错误,方便调试
        console.error("读取用户数据失败:", error);
      });
  }
});
</script>

关键调整说明

  • 直接复用onAuthStateChanged回调返回的user参数获取用户ID,避免异步时序问题导致的UID获取异常
  • 新增角色字段判断逻辑,根据实际存储的角色值执行对应跳转
  • 增加异常捕获逻辑,数据库读取出错时可以在控制台查看错误信息方便排查
  • 新增无对应用户数据的兜底跳转逻辑,避免页面无响应

如果你的角色字段存储的是中文值,直接把判断条件里的'user'/'freelancer'替换为对应的'普通用户'/'自由职业者'即可。

内容的提问来源于stack exchange,提问作者Hey monday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:36:00