2016-10-05 35 views
9

Ich möchte Change-Passwort-Funktionalität für meine Anwendung implementieren.Ändern Sie das Passwort mit Firebase für Android

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

Ich fand, dass das FirebaseUser Objekt eine updatePassword Methode hat, die ein neues Passwort als Parameter akzeptiert. Ich könnte diese Methode verwenden und die Validierung selbst implementieren. Allerdings benötige ich das aktuelle Passwort des Benutzers zum Vergleich mit dem eingegebenen und ich kann keinen Weg finden, dieses Passwort zu erhalten.

Ich fand auch eine andere method auf dem Firebase Objekt, das das alte Passwort, neues Passwort und einen Handler nimmt. Das Problem ist, dass ich auch com.firebase:firebase-client-android:2.5.2+ umfassen diese Klasse zuzugreifen, und wenn ich diese Methode versuche ich bin immer auf folgende Fehler:

Projects created at console.firebase.google.com must use the new Firebase Authentication SDKs available from firebase.google.com/docs/auth/

Fühlen Sie sich wie ich hier etwas fehlt bin. Was ist der empfohlene Ansatz für die Implementierung? Und wann welche Abhängigkeit verwenden?

+0

try this . –

Antwort

17

fand ich ein praktisches Beispiel dafür in der Firebase docs:

Some security-sensitive actions—such as deleting an account, setting a primary email address, and changing a password—require that the user has recently signed in. If you perform one of these actions, and the user signed in too long ago, the action fails and throws FirebaseAuthRecentLoginRequiredException. When this happens, re-authenticate the user by getting new sign-in credentials from the user and passing the credentials to reauthenticate. For example:

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

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

Eine Möglichkeit, Ihren Benutzern zu ermöglichen, ihr Kennwort zu ändern, besteht darin, ein Dialogfeld zu öffnen, in dem sie ihr aktuelles Kennwort und das neue Kennwort eingeben. Sie dann sign in (oder re-authenticate) den Benutzer mit dem aktuellen Passwortund rufen Sie updatePassword(), um es zu aktualisieren.

8

in Feuerbasis Passwort ändern bisschen schwierig ist. Es ist nicht wie das, was wir normalerweise tun, um das Passwort im serverseitigen Scripting und in der Datenbank zu ändern. Um die Funktion zum Ändern des Kennworts in Ihrer App zu implementieren, müssen Sie zunächst die E-Mail-Adresse des Benutzers von FirebaseAuth abrufen oder den Benutzer auffordern, eine E-Mail einzugeben und danach das alte Kennwort einzugeben, da das Kennwort des Benutzers nicht abgerufen werden kann, wie Frank van Pufelen sagte. Danach müssen Sie das erneut authentifizieren. Wenn die erneute Authentifizierung erfolgreich ist, 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.

-2

Die Abfrage dreht sich darum, dass Benutzer ihre Passwörter vergessen oder ihre Passwörter per E-Mail zurücksetzen möchten. Die durchgeführt werden, kann Auth.sendPasswordResetEmail("[email protected]");

erreicht

von

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

sonst irgendwo Initialisierung beginnen, wenn ein Benutzer-Anforderungen, ihre Passwörter einfach den mAuth Zugriff zu aktualisieren oder zurückzusetzen,

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

Nun ist es unnötig, sich selbst zu belasten, um nach Ihrer Datenbank zu suchen, um herauszufinden, ob die E-Mail beendet wird s oder nicht, Firebase mAuth wird das für Sie übernehmen.

Ist die E-Mail authentifiziert?Ist es in Ihrer Authentifizierungsliste aktiv? Dann senden Sie eine Passwort-Reset-E-Mail.

enter image description here

Der Inhalt wird so etwas wie dieser

aussieht

enter image description here

die Reset-Link wird im folgenden Dialog auf eine neue Webseite io

Extra-

prompt

, wenn Sie von der Reset-Vorlage, die Firebase "erfunden" hat, etwas genervt sind. Sie können einfach von der Firebase-Konsole aus auf Ihren eigenen Brief zugreifen und ihn anpassen. Authentication> E-Mail-Vorlagen> Kennworts

enter image description here

Verwandte Themen