webentwicklung-frage-antwort-db.com.de

Ändern Sie das Passwort mit Firebase für Android

Ich möchte die Funktion zum Ändern des Kennworts für meine Anwendung implementieren.

Ich habe com.google.firebase:firebase-auth:9.0.2 In meine build.gradle - Datei aufgenommen und bis jetzt hat alles einwandfrei funktioniert, bis ich versucht habe, die Funktion zum Ändern des Kennworts zu implementieren.

Ich habe festgestellt, dass das Objekt FirebaseUser eine Methode updatePassword hat, die ein neues Kennwort als Parameter verwendet. Ich könnte diese Methode verwenden und die Validierung selbst implementieren. Ich benötige jedoch das aktuelle Passwort des Benutzers, um es mit dem eingegebenen zu vergleichen, und ich kann keinen Weg finden, an dieses Passwort zu gelangen.

Ich habe auch eine andere Methode für das Objekt Firebase gefunden, die das alte Kennwort, das neue Kennwort und einen Handler enthält. Das Problem ist, dass ich auch com.firebase:firebase-client-Android:2.5.2+ Einschließen muss, um auf diese Klasse zuzugreifen. Wenn ich diese Methode ausprobiere, wird folgender Fehler angezeigt:

Projekte, die unter console.firebase.google.com erstellt wurden, müssen die neuen Firebase-Authentifizierungs-SDKs verwenden, die unter firebase.google.com/docs/auth/ verfügbar sind.

Ich habe das Gefühl, dass mir hier etwas fehlt. Was ist der empfohlene Ansatz, um dies umzusetzen? Und wann welche Abhängigkeit nutzen?

21
nilsi

Ich habe ein praktisches Beispiel dafür in den Firebase-Dokumenten gefunden :

Einige sicherheitsrelevante Aktionen wie das Löschen eines Kontos, das Festlegen einer primären E-Mail-Adresse und das Ändern eines Kennworts setzen voraus, dass sich der Benutzer kürzlich angemeldet hat Aktion schlägt fehl und löst FirebaseAuthRecentLoginRequiredException aus. In diesem Fall müssen Sie den Benutzer erneut authentifizieren, indem Sie neue Anmeldeinformationen vom Benutzer abrufen und die Anmeldeinformationen an die erneute Authentifizierung übergeben. Beispielsweise:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
AuthCredential credential = EmailAuthProvider
        .getCredential("[email protected]", "password1234");

// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                Log.d(TAG, "Password updated");
                            } else {
                                Log.d(TAG, "Error password not updated")
                            }
                        }
                    });
                } else {
                    Log.d(TAG, "Error auth failed")
                }
            }
        });
39
nilsi

Das Ändern des Passworts in der Firebase ist etwas schwierig. Es ist nicht das, was wir normalerweise tun, um das Kennwort in serverseitigen Skripten und Datenbanken zu ändern. Um die Funktion zum Ändern des Kennworts in Ihrer App zu implementieren, müssen Sie zuerst die E-Mail-Adresse des Benutzers von FirebaseAuth oder Benutzer zur Eingabe auffordern und anschließend den Benutzer zur Eingabe eines alten Kennworts auffordern, da Sie das Kennwort des Benutzers nicht abrufen können, wie Frank van Puffelen sagte. Danach müssen Sie das erneut authentifizieren. Nach erfolgter erneuter Authentifizierung können Sie updatePassword() verwenden. Ich habe unten ein Beispiel hinzugefügt, das ich für meine eigene App verwendet habe. Hoffe, es wird dir helfen.

private FirebaseUser user;
user = FirebaseAuth.getInstance().getCurrentUser();
                final String email = user.getEmail();
                AuthCredential credential = EmailAuthProvider.getCredential(email,oldpass);

                user.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if(task.isSuccessful()){
                                user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if(!task.isSuccessful()){
                                            Snackbar snackbar_fail = Snackbar
                                                    .make(coordinatorLayout, "Something went wrong. Please try again later", Snackbar.LENGTH_LONG);
                                            snackbar_fail.show();
                                        }else {
                                            Snackbar snackbar_su = Snackbar
                                                    .make(coordinatorLayout, "Password Successfully Modified", Snackbar.LENGTH_LONG);
                                            snackbar_su.show();
                                        }
                                    }
                                });
                        }else {
                            Snackbar snackbar_su = Snackbar
                                    .make(coordinatorLayout, "Authentication Failed", Snackbar.LENGTH_LONG);
                            snackbar_su.show();
                        }
                    }
                });
            }
        }
16

Es gibt keine Möglichkeit, das aktuelle Kennwort eines Benutzers aus der Firebase-Authentifizierung abzurufen.

Eine Möglichkeit, Benutzern das Ändern ihres Passworts zu ermöglichen, besteht darin, ein Dialogfeld anzuzeigen, in dem sie ihr aktuelles Passwort und das neue Passwort eingeben, das sie möchten. Dann anmelden (oder erneut authentifizieren ) den Benutzer mit dem aktuellen Passwort und rufen updatePassword() auf, um es zu aktualisieren.

12

Bei der Abfrage geht es darum, dass Benutzer ihre Kennwörter vergessen oder ihre Kennwörter über einen E-Mail-Brief zurücksetzen möchten. Was kann durch Auth.sendPasswordResetEmail("[email protected]"); erreicht werden

beginnen Sie mit der Initialisierung

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthListener;
    private String DummyEmail = "[email protected]"

    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            if (firebaseAuth.getCurrentUser() == null) {
            }
        }
    };

Wenn ein Benutzer an einem anderen Ort die Aktualisierung oder das Zurücksetzen seines Kennworts anfordert, greift er einfach auf das mAuth zu.

    private void PassResetViaEmail(){
    if(mAuth != null) {
        Log.w(" if Email authenticated", "Recovery Email has been  sent to " + DummyEmail);
        mAuth.sendPasswordResetEmail(DummyEmail);
    } else {
        Log.w(" error ", " bad entry ");
    }
    }

Jetzt müssen Sie nicht mehr in Ihrer Datenbank nachfragen, um herauszufinden, ob die E-Mail existiert oder nicht. Firebase mAuth übernimmt dies für Sie.

Ist die E-Mail authentifiziert? Ist es in Ihrer Authentifizierungsliste aktiv? Dann senden Sie eine E-Mail zum Zurücksetzen des Passworts.

enter image description here

Der Inhalt wird ungefähr so ​​aussehen

enter image description here

der Link zum Zurücksetzen fordert den folgenden Dialog auf einer neuen Webseite an io

Extra

wenn Sie etwas nervös sind von der von Firebase "entwickelten" Reset-Vorlage. Über die Firebase-Konsole können Sie problemlos auf Ihren eigenen Brief zugreifen und ihn anpassen. Authentifizierung> E-Mail-Vorlagen> Kennwort zurücksetzen

enter image description here

1
Alexandros