web-dev-qa-db-fra.com

Comment envoyer un email de vérification avec Firebase?

J'inscris mes utilisateurs à l'aide de la méthode de courrier électronique et de mot de passe de Firebase. comme ça:

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

    }

    }
});

Une fois que l'e-mail de l'utilisateur a été enregistré avec succès, j'aimerais que Firebase envoie un e-mail de vérification. Je sais que cela est possible en utilisant la variable sendEmailVerification de Firebase. En plus de l'envoi de cet email, je souhaite que le compte de l'utilisateur soit désactivé jusqu'à ce qu'il vérifie l'e-mail. Cela nécessiterait également l'utilisation de la fonction isEmailVerified de Firebase. Cependant, je n’ai pas réussi à faire en sorte que Firebase envoie l’e-mail de vérification, je n’ai pas été en mesure de le faire pour désactiver et activer le compte qui envoie l’e-mail de vérification et après vérification.

9
amigo

Cette question concerne l'utilisation de Firebase pour envoyer le courrier électronique de vérification. L'OP n'est pas en mesure de déterminer comment désactiver et activer le compte qui envoie l'e-mail de vérification et après l'avoir vérifié.

En outre, cela n’est pas correctement documenté dans la documentation de Firebase. J'écris donc une procédure étape par étape que quelqu'un peut suivre s'il est confronté au problème.

1) L'utilisateur peut utiliser la méthode createUserWithEmailAndPassword.

Exemple:

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
                        }

                        // ...
                    }
                });

Si le nouveau compte a été créé, l'utilisateur est également connecté et AuthStateListener exécute le rappel onAuthStateChanged. Dans le rappel, vous pouvez gérer le travail d'envoi du courrier électronique de vérification à l'utilisateur.

Exemple:

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

        }
        // ...
    }
};

Maintenant, l'email de vérification d'envoi peut être écrit comme:

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

                        }
                    }
                });
    }

J'arrive maintenant à LoginActivity:

Ici, si l'utilisateur est connecté avec succès, nous pouvons simplement appeler une méthode dans laquelle vous écrivez une logique pour vérifier si l'e-mail est vérifié ou non.

Exemple:

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();
                        }
                        // ...
                    }
                });

Considérons maintenant la méthode checkIfEmailVerified:

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

    }
}

Donc, ici, je vérifie si le courriel est vérifié ou non. Sinon, déconnectez l'utilisateur.

C'était donc mon approche pour bien suivre les choses.

27
Amit Upadhyay

Utilisez FirebaseAuth.getInstance().getCurrentUser().sendEmailVerification() et FirebaseAuth.getInstance().getCurrentUser().isEmailVerified() 

Il n’ya aucun moyen de désactiver le compte via le SDK Firebase. Ce que vous pouvez faire est d’utiliser la variable GetTokenResult contenant le jeton d’identification d’authentification Firebase et de la valider par rapport à votre serveur personnalisé ou de définir un indicateur sur la base de données Firebase correspondant à cet utilisateur. Personnellement j'irais avec le drapeau dans la base de données Firebase 

4
Ognian Gloushkov

envoyer la vérification à l'email de l'utilisateur

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

vérifier si l'utilisateur est vérifié

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

Pour envoyer un lien de courrier électronique avec Firebase, vous devez d'abord saisir l'instance de FirebaseAuth À l'aide de l'instance créée par l'utilisateur sur Firebase via:

firebaseauth.createUserWithEmailAndPassword(email,pass);

Lorsque la méthode retourne avec succès, nous envoyons le lien de vérification à l'utilisateur à l'aide de l'instance d'utilisateur Firebase, comme suit: 

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

Voir ce lien: https://technicalguidee.000webhostapp.com/2018/10/email-verification-through-link-using-firebase-authentication-product-Android .

0
Sagar Thorat