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

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示例:

  1. 首先在创建用户时同步数据(注册或创建用户的地方):
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()));
}
  1. 然后通过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()));
  1. 自定义的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:47:55