2016-05-25 10 views
34

Ich habe Firebase E-Mail/Passwort-Authentifizierung erfolgreich eingerichtet, aber aus Sicherheitsgründen möchte ich, dass der Benutzer seine E-Mail-Adresse bestätigt. Es sagt auf Firebases Webseite:Firebase-Bestätigungs-E-Mail wird nicht gesendet

Wenn ein Nutzer sich eine E-Mail-Adresse und Passwort, ein Bestätigungs-E ihre E-Mail-Adresse bestätigen gesendet wird.

Aber wenn ich mich anmelde, erhalte ich keine Bestätigungsmail.

Ich habe gesucht und kann nur einen Code zum Senden der Kennwortzurücksetzung E-Mail finden, aber keinen Code zum Senden der E-Mail-Bestätigung.

Ich habe hier sieht:

https://firebase.google.com/docs/auth/ios/manage-users#send_a_password_reset_email

jemand bekommt eine Ahnung, wie ich es tun kann?

+2

Sie haben mit der iOS-Dokumentation verknüpft, aber die akzeptierte Antwort verwendet JavaScript.Welchen verwenden Sie (damit ich die Frage erneut an die verwendete Plattform anpassen kann)? –

+0

Bitte geben Sie das passende Tag für diese Frage an. –

+0

Ich kann .sendEmailVerification() in Android-Version nicht finden. Hat es jemand geschafft, die E-Mail-Überprüfung in Firebase auf Android zu verwenden? – Buli1212

Antwort

74

Ich habe festgestellt, dass die neue Firebase E-Mail-Authentifizierungsdokumente nicht ordnungsgemäß dokumentiert ist.

firebase.auth().onAuthStateChanged(function(user) { 
    user.sendEmailVerification(); 
}); 

Sie, dass beachten Sie:

  1. Sie können nur E-Mail-Überprüfung an Benutzer senden Objekt wem Sie E-Mail & Passwort Methode createUserWithEmailAndPassword
  2. nur, nachdem Sie in authentifizierten Status unterzeichnet Benutzer unter Verwendung erstellt, Firebase gibt ein Versprechen des Auth-Objekts zurück.
  3. Die alte onAuth-Methode wurde in onAuthStateChanged geändert.

Um zu überprüfen, ob E-Mail verifiziert:

firebase.auth().onAuthStateChanged(function(user) { 
    if (user.emailVerified) { 
    console.log('Email is verified'); 
    } 
    else { 
    console.log('Email is not verified'); 
    } 
}); 
+0

Danke, ich habe gesucht diese Antwort, wissen Sie, wie man überprüft, ob die E-Mail bestätigt wurde? – Benja0906

+2

Firebase.auth(). OnAuthStateChanged (Funktion (Benutzer) {(user.emailVerified)? Console.log ('E-Mail ist verifiziert'): console.log ('Email ist nicht verifiziert')}); –

+0

Danke, das war sehr hilfreich :) – Benja0906

4

Sie können, wenn die Überprüfung E-Mail und überprüfen senden verifiziert wurde wie in den AuthListener folgen:

mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 

      if (user != null) { 

//---- HERE YOU CHECK IF EMAIL IS VERIFIED 

       if (user.isEmailVerified()) { 
        Toast.makeText(LoginActivity.this,"You are in =)",Toast.LENGTH_LONG).show(); 
       } 

       else { 

//---- HERE YOU SEND THE EMAIL 

        user.sendEmailVerification(); 
        Toast.makeText(LoginActivity.this,"Check your email first...",Toast.LENGTH_LONG).show(); 
       } 

      } else { 
       // User is signed out 
       Log.d(TAG, "onAuthStateChanged:signed_out"); 
      } 
      // [START_EXCLUDE] 
      updateUI(user); 
      // [END_EXCLUDE] 
     } 
    }; 
2

wenn Sie mit kompilieren " com.google.firebase: firebase-auth: 9.2.0 "und compile 'com.google.firebase: firebase-core: 9.2.0' Die Methode sendEmailVerification() wird erst gelöst, wenn Sie auf 9.8.0 oder höher aktualisieren . Es hat die meiste Zeit verschwendet, bevor ich es herausgefunden habe.

+0

Danke. Ich habe viel Zeit verschwendet, bis ich das gelesen habe. – dacscan3669

0

Nach dem Erstellen eines Benutzers wird ein Benutzerobjekt zurückgegeben, in dem Sie überprüfen können, ob die E-Mail des Benutzers verifiziert wurde oder nicht.

Wenn ein Benutzer nicht verifiziert wurde, können Sie die sendEmailVerification-Methode für das Benutzerobjekt selbst auslösen.

firebase.auth() 
    .createUserWithEmailAndPassword(email, password) 
    .then(function(user){ 
     if(user && user.emailVerified === false){ 
     user.sendEmailVerification().then(function(){ 
      console.log("email verification sent to user"); 
     }); 
     } 
    }).catch(function(error) { 
     // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 

     console.log(errorCode, errorMessage); 
    }); 

Sie auch durch das Hören auf die AuthState, das Problem mit dem folgenden Verfahren überprüfen kann, ist, dass bei jeder neuen Sitzung (durch die Seite zu aktualisieren), eine neue E-Mail gesendet wird.

firebase.auth().onAuthStateChanged(function(user) { 
    user.sendEmailVerification(); 
}); 
Verwandte Themen