web-dev-qa-db-fra.com

Firebase Auth - avec Email et Mot de Passe - Vérifier l'utilisateur déjà enregistré

Je souhaite vérifier lorsqu'un utilisateur tente de s'inscrire avec createUserWithEmailAndPassword() dans la méthode d'authentification de l'utilisateur Firebase. Cet utilisateur est déjà enregistré auprès de mon application. 

Registered Users

10
Coolbub

Lorsque l'utilisateur essaie de créer un utilisateur avec la même adresse électronique, la réponse de la tâche sera "Réponse: l'adresse électronique est déjà utilisée par un autre compte." 

mFirebaseAuth.createUserWithEmailAndPassword(email,password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {                           
                        if(task.isSuccessful()){
                           //User registered successfully
                        }else{
                            Log.i("Response","Failed to create user:"+task.getException().getMessage());
                        }
                    }
                });

 Firebase Auth SignIn Method  Advanced Setting

11
Srinivasan

Pour détecter si un utilisateur avec cette adresse email existe déjà, vous pouvez détecter le moment où l'appel à createUserWithEmailAndPassword () échoue avec auth/email-already-in-use. Je vois que @Srinivasan vient de publier une réponse à cette question.

Vous pouvez également détecter qu'une adresse électronique est déjà utilisée en appelant fetchSignInMethodsForEmail() (précédemment appelé fetchProvidersForEmail() ). 

11
Frank van Puffelen

Tout d’abord, vous devez vous assurer que cette restriction est activée dans la console Firebase (paramètres de compte et d’adresse électronique). Regardez la réponse de @ Srinivasan.

Ensuite, faites ceci dans votre code Java:

firebaseAuthenticator.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {

                            if (task.getException() instanceof FirebaseAuthUserCollisionException) {
                                Toast.makeText(SignUpActivity.this, "User with this email already exist.", Toast.LENGTH_SHORT).show();
                            }


                        } else {
                            sendVerificationEmail();
                            startActivity(new Intent(SignUpActivity.this, DetailsCaptureActivity.class));
                        }

                        // ...
                    }
                });

C'est là que le truc se passe:

if (task.getException() instanceof FirebaseAuthUserCollisionException) {
                            Toast.makeText(SignUpActivity.this, 
          "User with this email already exist.", Toast.LENGTH_SHORT).show();

Plusieurs exceptions peuvent être levées lors de l’enregistrement d’un utilisateur avec adresse email et mot de passe, mais celle qui nous intéresse est la FirebaseAuthUserCollisionException. Comme son nom l'indique, cette exception est levée si l'email existe déjà. Si l'exception levée est une instance de cette classe, informez l'utilisateur.

6
ojonugwa ochalifu

Comme pratique de @ Frank, voici le code d'utilisation de fetchProvidersForEmail()

private boolean checkAccountEmailExistInFirebase(String email) {
                FirebaseAuth mAuth = FirebaseAuth.getInstance();
                final boolean[] b = new boolean[1];
                mAuth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>() {
                    @Override
                    public void onComplete(@NonNull Task<ProviderQueryResult> task) {
                        b[0] = !task.getResult().getProviders().isEmpty();
                    }
                });
                return b[0];
            }
4
Dasser Basyouni

Je cherchais dans ce genre de condition où nous pouvons détecter si l'utilisateur existe ou non et effectuer l'enregistrement et la connexion fetchProvidersForEmail est la meilleure option pour le moment. J'ai trouvé this tutorial. J'espère que ça vous aide aussi!

3
Akshay Taru

Ajoutez le code ci-dessous à MainActivity.Java file.Lorsque l'utilisateur tente de s'enregistrer avec la même adresse électronique, un message "L'adresse électronique est déjà utilisée par un autre compte" apparaîtra sous la forme d'un Toast

mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    if(!task.isSuccessful()){

                        Toast.makeText(MainActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();

                    }
                    if(task.isSuccessful()){
                        Toast.makeText(MainActivity.this, "Sign up successfull", Toast.LENGTH_SHORT).show();
                    }

                }
            });
0
Md Nakibul Hassan
private ProgressDialog progressDialog;
progressDialog.setMessage("Registering, please Wait...");
progressDialog.show();

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

                    //checking if success
                    if (task.isSuccessful()) {
                        //Registration was successfull:
                        Toast.makeText(RegistrationActivity.this, "Successfully registered!", Toast.LENGTH_LONG).show();

                    } else {
                        //Registration failed:
                        //task.getException().getMessage() makes the magic
                        Toast.makeText(RegistrationActivity.this, "Registration failed! " + "\n" + task.getException().getMessage(), Toast.LENGTH_LONG).show();
                    }
                    progressDialog.dismiss();
                }
            });
0
Annemarie Rinyu