Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过用户电子邮件Firebase android获取用户ID?_Android_Firebase_Firebase Realtime Database_Firebase Authentication_Userid - Fatal编程技术网

如何通过用户电子邮件Firebase android获取用户ID?

如何通过用户电子邮件Firebase android获取用户ID?,android,firebase,firebase-realtime-database,firebase-authentication,userid,Android,Firebase,Firebase Realtime Database,Firebase Authentication,Userid,给定一个电子邮件地址,是否可以获取一个人的用户ID?比如说, mRef.addValueEventListener(new ValueEventListener() { private String role; @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { for(DataSnapshot snapshot: dataSna

给定一个电子邮件地址,是否可以获取一个人的用户ID?比如说,

mRef.addValueEventListener(new ValueEventListener() {
        private String role;

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot: dataSnapshot.getChildren()){
                User user = snapshot.getValue(User.class);

                role = user.getRole();
                if(role!=null){
                    if(role.equals("student")){
                        STUDENT_LIST.add(user);
                    }
                }
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    });
如果我有一个可变的电子邮件,其中包含该人的电子邮件。我可以通过这样做来获得他们的身份证吗

String userID = mAuth.DatabaseReference.getuID.(email);
对不起,如果这是个愚蠢的问题

编辑:注意,我正在寻找一个不是当前用户的人的ID。所以我不能使用
FirebaseUser=mAuth.getCurrentUser()

我的数据库的结构如下所示,因此ID将存储在数据库中。我只需要一种获取它的方法(在下面的图表中,我没有电子邮件字段,但我将添加一个,以防有人想知道--)

此外,如果可能的话,我想根据他们的电子邮件或一旦我获得了身份证,通过身份证获得他们的个人资料图像


如果您想通过用户的电子邮件在受信任的服务器上查找用户,可以使用Firebase Admin SDK。从:


Firebase身份验证客户端SDK仅提供对当前已验证用户的配置文件的访问。它们不提供通过电子邮件地址查找用户的方法。要允许客户端查找,通常的方法是通过电子邮件地址将UID存储在数据库中:

"emailToUid": {
    "SumOne@domain,com": "uidOfSumOne",
    "puf@firebaseui,com": "uidOfPuf"
}
使用此简单列表,您可以通过编码的电子邮件地址从以下位置查找UID:

ref.child("emailToUid").child("SumOne@domain,com").addSingleValueEventListener(...
另见:


通过这种方式,您可以使用电子邮件和密码登录用户并检索id:

FirebaseAuth.getInstance().signInWithEmailAndPassword(email,password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
          @Override
          public void onSuccess(AuthResult authResult) {
              FirebaseUser user = authResult.getUser();
          }
      });
FirebaseAuth.getInstance().signInWithEmailAndPassword(电子邮件,密码)。addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公共无效(AuthResult AuthResult){
FirebaseUser=authResult.getUser();
}
});

Firebase不通过电子邮件提供用户信息。 您可以做一件事,使用您的凭证登录,成功登录后使用下面的代码获取用户详细信息。

FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
                            if(currentFirebaseUser !=null)

    {
        Log.d(TAG, "onComplete: currentUserUid---->" + currentFirebaseUser.getUid());
        Log.d(TAG, "onComplete: currentUserEmail---->" + currentFirebaseUser.getEmail());
        Log.d(TAG, "onComplete: currentUserDisplayName---->" + currentFirebaseUser.getDisplayName());
    } else

    {
        Log.d(TAG, "onComplete: currentUserUid is null");
    }

我也遇到了同样的问题,我通过为模型类创建一个新属性来解决了这个问题,您希望从另一个帐户访问该模型类的数据

如下所示,我的模型类现在有5个属性。最初它只是前四个

public class User {

    public String id;
    public String name;
    public String email;
    public String role;
    public String uid;

    public User() {
    }

    public User(String id, String name, String email, String role, String uid) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.role = role;
        this.uid = uid;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public String getRole() {
        return role;
    }

    public String getUid() {
        return uid;
    }

    public void setId(String id) {
        this.id = id;
    }


    public void setName(String name) {
        this.name = name;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

}
在这个类中,我以前没有使用过uid属性。 因此,当我登录时,我无法访问另一个帐户的uid。这就是为什么我改变了上面给出的模型类,现在我可以通过使用任何其他参数来检查是否相等来访问任何数据

比如说,

mRef.addValueEventListener(new ValueEventListener() {
        private String role;

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot: dataSnapshot.getChildren()){
                User user = snapshot.getValue(User.class);

                role = user.getRole();
                if(role!=null){
                    if(role.equals("student")){
                        STUDENT_LIST.add(user);
                    }
                }
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    });

在这里,您可以看到我从另一个登录帐户中获取了所有学生的用户,他们的值可以使用添加到上述模型类中的uid进行访问。

解决此问题的简单方法是创建另一个模型(表),它保存用户的电子邮件地址和id。通过这种方式,您可以检索包含电子邮件的id。有一些解决方案使用java脚本,但它们有复杂的运行时间。

因此,我需要将uid存储为一个值,不可能通过电子邮件从根元素获取uid?我还可以获取此人(而不是当前用户)的图像配置文件吗?Firebase身份验证客户端SDK仅提供对当前身份验证用户配置文件的访问。我在回答中澄清了这一点。在应用程序端,在没有用户登录的情况下检查登录提供商类型的任何策略。。。要防止重新设置进行社交登录的用户的密码。。。当前正在获取中所有登录邮件id上的重置密码链接android@FrankvanPuffelen将uidToEmail作为密钥不是更符合逻辑吗?我认为电子邮件地址可以为用户更改,但UID不会更改?您必须将点更改为逗号,这是正确的,但请注意,电子邮件地址中允许使用$等字符串,但不能将其作为firebase密钥,因此您还必须将其更改为某种符号。