web-dev-qa-db-fra.com

Comment obtenir l'ID utilisateur par l'utilisateur Email Firebase android?

Étant donné une adresse e-mail, est-il possible d'obtenir l'ID utilisateur d'une personne? Par exemple,

Si j'ai un email variable qui a un email de la personne. Puis-je obtenir leur identité en faisant quelque chose comme

String userID = mAuth.DatabaseReference.getuID.(email);

Désolé si c'est une question stupide.

Edit: note, je cherche à obtenir l'ID d'une personne qui n'est pas l'utilisateur actuel. Donc, je ne peux pas utiliser FirebaseUser user = mAuth.getCurrentUser(); 

La structure de ma base de données ressemble à ceci, donc l'ID sera déjà stocké dans la base de données. J'ai juste besoin d'un moyen de l'obtenir (Dans le diagramme présenté ci-dessous, je n'ai pas de champ de courrier électronique, mais j'en ajouterai un, au cas où quelqu'un se demanderait -_-).

De plus, si possible, j'aimerais obtenir leur image de profil soit en fonction de leur adresse e-mail, soit une fois l'identifiant obtenu, via ID.

 enter image description here

9
SumOne

Si vous souhaitez rechercher un utilisateur par son courrier électronique sur un serveur de confiance, vous pouvez utiliser le SDK d’administrateur Firebase. À partir de documentation sur la récupération des données utilisateur

admin.auth().getUserByEmail(email)
  .then(function(userRecord) {
    // See the tables above for the contents of userRecord
    console.log("Successfully fetched user data:", userRecord.toJSON());
  })
  .catch(function(error) {
    console.log("Error fetching user data:", error);
  });

Les kits de développement logiciel client pour l'authentification Firebase fournissent uniquement un accès au profil de l'utilisateur actuellement authentifié. Ils ne permettent pas de rechercher un utilisateur en fonction de son adresse électronique. Pour permettre la recherche côté client, le moyen le plus courant consiste à stocker l'adresse UID par adresse électronique dans la base de données:

"emailToUid": {
    "SumOne@domain,com": "uidOfSumOne",
    "puf@firebaseui,com": "uidOfPuf"
}

Avec cette simple liste, vous pouvez rechercher l’UID à l’aide de l’adresse e-mail codée à partir de:

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

Voir également:

16
Frank van Puffelen

Firebase ne fournit pas d’informations utilisateur sur la base du courrier électronique . Vous pouvez faire une chose. Connectez-vous avec vos informations d’identité. Après une connexion réussie, utilisez le code ci-dessous pour obtenir les détails de l’utilisateur.

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");
    }
0
Rahul Jain

J'ai eu le même problème, que j'ai résolu en créant un nouvel attribut à la classe de modèle dont vous voulez accéder aux données depuis un autre compte.

Comme indiqué ci-dessous, ma classe de modèles a 5 attributs maintenant. Au début, il ne s'agissait que des quatre premiers.

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;
    }

}

Dans cette classe, je n'avais pas mis l'attributuidavant . Donc, lorsque je suis connecté, je n'ai pas accès àuidd'un autre Compte. C'est pourquoi j'ai modifié la classe de modèle comme indiqué ci-dessus et je peux maintenant accéder à toutes les données simplement en utilisant un autre paramètre pour vérifier l'égalité.

Par exemple,

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) {}
    });

Vous voyez ici que je prends tous les utilisateurs qui sont étudiants , dont les valeurs peuvent être consultées à l’aide duuidqui a été ajouté à la classe de modèle ci-dessus, à partir d’un autre compte connecté.

0
KIRAN C NAYAK