web-dev-qa-db-ger.com

Wie bekomme ich eine UserID per Email von Firebase android?

Kann man bei einer E-Mail-Adresse die Benutzer-ID einer Person erhalten? Zum Beispiel,

Wenn ich eine variable E-Mail mit der E-Mail der Person habe. Kann ich ihren Ausweis bekommen, indem ich so etwas mache?

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

Sorry, wenn das eine dumme Frage ist.

Bearbeiten: Hinweis: Ich suche die ID einer Person, die nicht der aktuelle Benutzer ist. Also kann ich FirebaseUser user = mAuth.getCurrentUser(); nicht verwenden 

Die Struktur meiner Datenbank sieht folgendermaßen aus, daher wird die ID bereits in der Datenbank gespeichert. Ich brauche nur einen Weg, um es zu bekommen (In dem unten abgebildeten Diagramm habe ich kein E-Mail-Feld, aber ich werde ein E-Mail hinzufügen, da sich irgendjemand gefragt hat, _).

Wenn es möglich ist, möchte ich das Profilbild entweder anhand der E-Mail-Adresse erhalten oder wenn ich die ID über die ID erhalten habe.

 enter image description here

9
SumOne

Wenn Sie einen Benutzer anhand seiner E-Mails auf einem vertrauenswürdigen Server suchen möchten, können Sie das Firebase Admin SDK verwenden. Aus der Dokumentation zum Abrufen von Benutzerdaten

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

Die Client-SDKs für die Firebase-Authentifizierung bieten nur Zugriff auf das Profil des aktuell authentifizierten Benutzers. Sie bieten keine Möglichkeit, einen Benutzer anhand seiner E-Mail-Adresse zu suchen. Um eine clientseitige Suche zuzulassen, wird die UID per E-Mail-Adresse normalerweise in der Datenbank gespeichert:

"emailToUid": {
    "[email protected],com": "uidOfSumOne",
    "[email protected],com": "uidOfPuf"
}

Mit dieser einfachen Liste können Sie die UID anhand der verschlüsselten E-Mail-Adresse nachschlagen:

ref.child("emailToUid").child("[email protected],com").addSingleValueEventListener(...

Siehe auch:

16

Firebase stellt keine Benutzerinformationen auf der Basis von E-Mail zur Verfügung ..__ Sie können sich mit Ihren Zugangsdaten anmelden und nach erfolgreichem Login den unten stehenden Code verwenden, um Benutzerdaten zu erhalten.

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

Ich hatte das gleiche Problem, das ich durch Anlegen eines neuen Attributs für die Modellklasse gelöst habe, auf deren Daten Sie von einem anderen Konto aus zugreifen möchten.

Wie unten angegeben, verfügt meine Modellklasse jetzt über 5 Attribute. Anfangs waren es nur die ersten vier.

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

}

In dieser Klasse hatte ich das Attributuidnicht vor ..__ gesetzt. Wenn ich angemeldet bin, habe ich keinen Zugriff aufuideines anderen Konto. Aus diesem Grund habe ich die Modellklasse wie oben beschrieben geändert. Jetzt kann ich auf alle Daten zugreifen, indem ich mit anderen Parametern die Gleichheit prüfe.

Zum Beispiel,

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

Hier können Sie sehen, dass ich alle Benutzer nehme, die Studenten sind, auf deren Werte mit deruid, die der obigen Modellklasse hinzugefügt wurde, von einem anderen angemeldeten Konto aus zugegriffen werden kann.

0
KIRAN C NAYAK