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

Android Studio Java开发:读取Firebase Realtime Database值判断用户等级跳转页面

Firebase Realtime Database 用户等级校验跳转方案

前置准备

  • 确认项目已集成Firebase Realtime Database SDK,且数据库安全规则配置允许认证用户读取自身节点数据,参考规则如下:
{
  "rules": {
    "Users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

修改后完整登录代码

mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if(task.isSuccessful()){
            FirebaseUser user = mAuth.getCurrentUser();
            // 先判空避免空指针异常
            if (user == null) {
                Toast.makeText(MainActivity.this, "获取用户信息失败", Toast.LENGTH_SHORT).show();
                progressBar.setVisibility(View.GONE);
                return;
            }
            if(user.isEmailVerified()) {
                // 定位到当前用户对应的数据库节点
                DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("Users").child(user.getUid());
                // 单次读取用户数据
                userRef.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        // 读取ident字段,默认值可以设为普通用户标识
                        String ident = snapshot.child("ident").getValue(String.class);
                        if ("associado".equals(ident)) {
                            startActivity(new Intent(MainActivity.this, AssociadoActivity.class));
                        } else {
                            startActivity(new Intent(MainActivity.this, AdminActivity.class));
                        }
                        progressBar.setVisibility(View.GONE);
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {
                        Toast.makeText(MainActivity.this, "读取用户等级失败:" + error.getMessage(), Toast.LENGTH_SHORT).show();
                        progressBar.setVisibility(View.GONE);
                    }
                });
            } else {
                user.sendEmailVerification();
                Toast.makeText(MainActivity.this, "验证邮件已发送,请先验证邮箱", Toast.LENGTH_SHORT).show();
                progressBar.setVisibility(View.GONE);
            }
        } else {
            Toast.makeText(MainActivity.this, "O login não pode ser efetuado", Toast.LENGTH_SHORT).show();
            progressBar.setVisibility(View.GONE);
        }
    }
});

逻辑说明

  • 登录成功后先校验用户实例是否为空,避免空指针崩溃
  • 邮箱验证通过后,通过当前用户的UID定位到Realtime Database中对应的用户数据节点
  • 调用addListenerForSingleValueEvent单次读取用户数据,不需要持续监听
  • 读取到ident字段后做匹配判断,对应跳转不同页面
  • 补充了数据读取失败、邮箱验证提示的 toast 反馈,优化用户体验

内容的提问来源于stack exchange,提问作者Douglas Soares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:24:04