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

Android中如何通过Firebase认证Uid获取用户节点的用户名与手机号?

获取Firebase用户节点中的用户名和手机号(通过UID)

Got it, since you already have the authenticated user's UID and your user data is stored under a user node, here's exactly how to fetch the username and phone number in Android, covering both common Firebase database options:


1. 如果使用Firebase Realtime Database

First, make sure your database structure follows a standard scalable setup like this:

{
  "users": {
    "abc123xyz": {  // 这里是用户的UID
      "username": "JohnDoe",
      "phone": "+1234567890",
      "email": "john@example.com"
    },
    "def456uvw": {
      "username": "JaneSmith",
      "phone": "+0987654321",
      "email": "jane@example.com"
    }
  }
}

代码实现(Java)

// 确认当前登录用户的UID(你说已能获取,这里也给出标准获取方式)
String currentUid = FirebaseAuth.getInstance().getCurrentUser().getUid();

// 获取Realtime Database的用户节点引用
DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("users").child(currentUid);

// 添加监听器拉取数据
userRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        // 方式1:直接读取单个字段
        String username = snapshot.child("username").getValue(String.class);
        String phone = snapshot.child("phone").getValue(String.class);
        
        // 方式2:用POJO类解析更优雅(推荐)
        // 先创建User类:public class User { private String username; private String phone; /* 需添加无参构造和getter方法 */ }
        User user = snapshot.getValue(User.class);
        if (user != null) {
            String userNameFromPojo = user.getUsername();
            String phoneFromPojo = user.getPhone();
            // 在这里使用获取到的信息,比如更新UI
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        // 处理数据获取失败的情况,比如权限不足、网络异常
        Log.e("UserFetchError", "Failed to get user data: " + error.getMessage());
    }
});

关键注意点

  • 一定要配置正确的数据库权限!如果只允许登录用户读取自己的数据,规则可以这样写:
    {
      "rules": {
        "users": {
          "$uid": {
            ".read": "$uid === auth.uid",
            ".write": "$uid === auth.uid"
          }
        }
      }
    }
    

2. 如果使用Firebase Firestore

如果数据存在Firestore中,结构应该是:

  • 集合名:users
  • 每个文档的ID = 用户UID
  • 文档字段:username、phone等

代码实现(Java)

String currentUid = FirebaseAuth.getInstance().getCurrentUser().getUid();

FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("users").document(currentUid)
        .get()
        .addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    // 直接读取字段
                    String username = document.getString("username");
                    String phone = document.getString("phone");
                    
                    // 或者用POJO类解析
                    User user = document.toObject(User.class);
                    if (user != null) {
                        // 使用获取到的用户信息
                    }
                } else {
                    Log.d("UserFetch", "No such user document");
                }
            } else {
                Log.d("UserFetch", "Get user data failed: ", task.getException());
            }
        });

Firestore规则注意点

同样要配置权限确保安全,比如:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{uid} {
      allow read, write: if request.auth != null && request.auth.uid == uid;
    }
  }
}

不管用哪种数据库,核心逻辑都是通过UID定位到对应的用户节点/文档,再读取目标字段值。如果是Kotlin开发者,写法类似,只是语法上会更简洁(比如lambda表达式、空安全处理)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:36:21