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
相关产品推荐
相关产品推荐

