webentwicklung-frage-antwort-db.com.de

Wie versende ich eine Bestätigungs-E-Mail mit Firebase?

Ich melde meine Benutzer mit der E-Mail- und Kennwortmethode von Firebase an. so was:

mAuth.createUserWithEmailAndPassword(email, password)

.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {

    if (task.isSuccessful()) {

        FirebaseUser signed = task.getResult().getUser();

        writeNewUser(signed.getUid());

        new Android.os.Handler().postDelayed(

                new Runnable() {
                    public void run() {

                        updateUser(b);

                    }
                }, 3000);

    } else {

        new Android.os.Handler().postDelayed(

                new Runnable() {
                    public void run() {

                        onSignupFailed();

                    }
                }, 3000);

    }

    }
});

Nachdem die E-Mail des Benutzers erfolgreich registriert wurde, möchte ich, dass Firebase eine Bestätigungs-E-Mail sendet. Ich weiß, dass dies mit Firebases sendEmailVerification möglich ist. Zusätzlich zum Senden dieser E-Mail möchte ich, dass das Konto des Benutzers deaktiviert wird, bis die E-Mail bestätigt wird. Dies würde auch die Verwendung der Firebase-Funktion isEmailVerified erfordern. Ich habe es jedoch nicht geschafft, Firebase zum Versenden der Bestätigungs-E-Mail zu bewegen. Ich konnte nicht herausfinden, ob es das Konto deaktiviert, das die Bestätigungs-E-Mail sendet, und nachdem es bestätigt wurde.

9
amigo

In dieser Frage wird beschrieben, wie Firebase zum Senden der Bestätigungs-E-Mail verwendet wird. Das OP kann nicht herausfinden, wie das Konto deaktiviert und aktiviert werden kann, das die Bestätigungs-E-Mail sendet und nachdem diese bestätigt wurde.

Dies ist auch in der Firebase-Dokumentation nicht ordnungsgemäß dokumentiert. Ich schreibe also ein schrittweises Verfahren, dem jemand folgen kann, wenn er/sie das Problem hat.

1) Der Benutzer kann die createUserWithEmailAndPassword-Methode verwenden.

Beispiel:

mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d("TAG", "createUserWithEmail:onComplete:" + task.isSuccessful());

                        // If sign in fails, display a message to the user. If sign in succeeds
                        // the auth state listener will be notified and logic to handle the
                        // signed in user can be handled in the listener.
                        if (!task.isSuccessful()) {
                            // Show the message task.getException()
                        }
                        else
                        {
                            // successfully account created
                            // now the AuthStateListener runs the onAuthStateChanged callback
                        }

                        // ...
                    }
                });

Wenn das neue Konto erstellt wurde, ist der Benutzer ebenfalls angemeldet und der AuthStateListener führt den onAuthStateChanged-Callback aus. Im Rückruf können Sie das Senden der Bestätigungs-E-Mail an den Benutzer verwalten.

Beispiel:

onCreate(...//
mAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user != null) {
            // User is signed in
            // NOTE: this Activity should get onpen only when the user is not signed in, otherwise
            // the user will receive another verification email.
            sendVerificationEmail();
        } else {
            // User is signed out

        }
        // ...
    }
};

Jetzt kann die Sende-Bestätigungs-E-Mail folgendermaßen geschrieben werden:

private void sendVerificationEmail()
    {
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

        user.sendEmailVerification()
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            // email sent


                                    // after email is sent just logout the user and finish this activity
                                    FirebaseAuth.getInstance().signOut();
                                    startActivity(new Intent(SignupActivity.this, LoginActivity.class));
                                    finish();
                        }
                        else
                        {
                            // email not sent, so display message and restart the activity or do whatever you wish to do

                                    //restart this activity
                                    overridePendingTransition(0, 0);
                                    finish();
                                    overridePendingTransition(0, 0);
                                    startActivity(getIntent());

                        }
                    }
                });
    }

Jetzt zu LoginActivity kommen:

Wenn der Benutzer erfolgreich angemeldet ist, können Sie hier einfach eine Methode aufrufen, in der Sie Logik schreiben, um zu prüfen, ob die E-Mail bestätigt wurde oder nicht.

Beispiel:

mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        //Log.d("TAG", "signInWithEmail:onComplete:" + task.isSuccessful());

                        // If sign in fails, display a message to the user. If sign in succeeds
                        // the auth state listener will be notified and logic to handle the
                        // signed in user can be handled in the listener.
                        if (!task.isSuccessful()) {
                            //Log.w("TAG", "signInWithEmail:failed", task.getException());

                        } else {
                            checkIfEmailVerified();
                        }
                        // ...
                    }
                });

Betrachten Sie nun die checkIfEmailVerified-Methode:

private void checkIfEmailVerified()
{
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

    if (user.isEmailVerified())
    {
        // user is verified, so you can finish this activity or send user to activity which you want.
        finish();
        Toast.makeText(LoginActivity.this, "Successfully logged in", Toast.LENGTH_SHORT).show();
    }
    else
    {
        // email is not verified, so just Prompt the message to the user and restart this activity.
        // NOTE: don't forget to log out the user.
        FirebaseAuth.getInstance().signOut();

        //restart this activity

    }
}

Hier überprüfe ich also, ob die E-Mail bestätigt wurde oder nicht. Wenn nicht, dann melden Sie den Benutzer ab.

Dies war mein Ansatz, die Dinge richtig zu verfolgen.

27
Amit Upadhyay

Verwenden Sie FirebaseAuth.getInstance().getCurrentUser().sendEmailVerification() und FirebaseAuth.getInstance().getCurrentUser().isEmailVerified() 

Es gibt keine Möglichkeit, das Konto über das Firebase SDK zu deaktivieren. Sie können die GetTokenResult verwenden, die das Firebase-Authentifizierungs-ID-Token enthält, und es gegen Ihr benutzerdefiniertes Backend validieren oder ein Flag für die diesem Benutzer entsprechende Firebase-Datenbank setzen. Persönlich würde ich mit der Flagge in der Firebase-Datenbank gehen 

4

bestätigung an die E-Mail des Benutzers senden

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

Überprüfen Sie, ob der Benutzer verifiziert ist

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
boolean emailVerified = user.isEmailVerified();
2
karem

Um E-Mail-Links mit Firebase zu senden, müssen Sie zunächst die FirebaseAuth-Instanz Mit der Instanz, die wir Benutzer auf Firebase erstellen, aufrufen:

firebaseauth.createUserWithEmailAndPassword(email,pass);

Wenn die Methode erfolgreich zurückgegeben wird, senden wir den Bestätigungslink mithilfe der Firebase-Benutzerinstanz wie folgt an den Benutzer: 

 final FirebaseUser user = mAuth.getCurrentUser();
                      user.sendEmailVerification()

Siehe diesen Link: https://technicalguidee.000webhostapp.com/2018/10/email-verification-through-link-using-firebase-authentication-product-Android .

0
Sagar Thorat