Android Firebase中如何通过用户ID获取FirebaseUser对象?
获取指定UID的Firebase用户对象(Android)
嘿,我来帮你搞定这个问题!FirebaseAuth.getInstance().getCurrentUser()只能拿到当前登录的用户,但要获取指定UID的用户记录,得用不同的方法,分两种情况给你说明:
方法一:直接通过Firebase Auth API获取(需注意权限)
从Firebase Auth的新版本客户端SDK开始,提供了getUser()异步方法来获取指定UID的用户记录,返回的UserRecord对象和FirebaseUser结构类似,包含核心的用户信息。代码示例如下:
// 你的目标用户UID String targetUid = "rka1KNwIA2elmmHOv97AZbj9KDs1"; FirebaseAuth.getInstance().getUser(targetUid) .addOnSuccessListener(userRecord -> { // 成功获取到用户记录,提取需要的信息 String userEmail = userRecord.getEmail(); String userId = userRecord.getUid(); boolean isEmailVerified = userRecord.isEmailVerified(); // 这里可以根据需求把UserRecord转成你需要的格式,或者直接使用 Log.d("UserFetch", "Fetched user: " + userEmail); }) .addOnFailureListener(e -> { // 处理失败情况,比如用户不存在、权限不足 Log.e("UserFetch", "Failed to get user: " + e.getMessage()); });
注意事项:
- 这个方法在客户端使用时,默认权限下普通用户无法获取其他用户的Auth记录,需要你在Firebase控制台的「Authentication」→「规则」里调整权限,或者使用Admin SDK(服务器端)来调用。如果是普通客户端应用,更推荐下面的方法。
方法二:从Firebase数据库(Firestore/实时数据库)读取(更适合客户端)
通常我们会在创建用户时,把用户的基本信息同步到Firestore或实时数据库中,这样客户端就能安全地查询指定UID的用户信息。
Firestore示例:
- 首先在创建用户时同步数据(注册或创建用户的地方):
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser(); if (currentUser != null) { User user = new User( currentUser.getUid(), currentUser.getEmail(), currentUser.isEmailVerified() ); FirebaseFirestore.getInstance() .collection("users") .document(currentUser.getUid()) .set(user) .addOnSuccessListener(aVoid -> Log.d("UserSync", "User data synced successfully")) .addOnFailureListener(e -> Log.e("UserSync", "Failed to sync user data: " + e.getMessage())); }
- 然后通过UID查询用户信息:
String targetUid = "rka1KNwIA2elmmHOv97AZbj9KDs1"; FirebaseFirestore.getInstance() .collection("users") .document(targetUid) .get() .addOnSuccessListener(documentSnapshot -> { if (documentSnapshot.exists()) { // 将文档转为自定义的User对象 User customUser = documentSnapshot.toObject(User.class); // 现在你可以使用customUser对象,和FirebaseUser类似 Log.d("UserFetch", "Fetched user email: " + customUser.getEmail()); } else { Log.d("UserFetch", "No user found with this UID"); } }) .addOnFailureListener(e -> Log.e("UserFetch", "Failed to fetch user: " + e.getMessage()));
- 自定义的User实体类:
public class User { private String uid; private String email; private boolean isEmailVerified; // 空构造函数是Firestore反序列化必需的 public User() {} public User(String uid, String email, boolean isEmailVerified) { this.uid = uid; this.email = email; this.isEmailVerified = isEmailVerified; } // Getter和Setter方法 public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public boolean isEmailVerified() { return isEmailVerified; } public void setEmailVerified(boolean emailVerified) { isEmailVerified = emailVerified; } }
这种方法的优势是权限可控,你可以通过Firestore的规则来限制谁能读取用户数据,更适合普通客户端应用的场景。
内容的提问来源于stack exchange,提问作者Rushikesh Gaikwad
相关产品推荐
相关产品推荐

