如何基于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
相关产品推荐
相关产品推荐

