web-dev-qa-db-fra.com

Firebase - Comment vérifier si un utilisateur est déjà inscrit avec un numéro de téléphone

J'utilise l'authentification par téléphone firebase. Lorsqu'un utilisateur crée un compte en utilisant un numéro de téléphone et la prochaine fois, il crée un compte avec le même numéro de téléphone .__ Puis je veux montrer un message disant que le compte existe déjà 

5
Asad Mirza

Afin de détecter si ce numéro de téléphone a déjà été utilisé pour l'enregistrement du compte, vous ne pouvez pas compter uniquement sur la table d'authentification par défaut. Mais il faut aussi utiliser la base de données Firebase pour créer une table utilisateur fictive pour vérifier.

Par exemple, vous pouvez créer un arbre json pour enregistrer les données utilisateur dans la base de données temps réel dans un format structuré comme ceci:

 enter image description here

Et votre code devrait ressembler à:

Sur le morceau de code de connexion réussie/enregistrement d'utilisateur} _:

DatabaseRef userRef = FirebaseDatabase.getInstance.getRef("users");
userRef.orderByChild("telNum").equalTo(phoneNumber).addListenerForSingleValueEvent(new ValueEventListener() {

     if (dataSnapshot.getValue() != null){
        //it means user already registered
        //Add code to show your Prompt
        showPrompt();
     }else{
        //It is new users
        //write an entry to your user table
        //writeUserEntryToDB();
     }
}
2
Philip Cheung

onTask vérification du résultat FirebaseAuthUserCollisionException

if (task.getException() instanceof FirebaseAuthUserCollisionException) {
    Toast.makeText(Signup.this, "User already exist.",  Toast.LENGTH_SHORT).show();
}
2
Atif AbbAsi

Je l'ai fait dans mon projet et cela fonctionne parfaitement, vous pouvez l'utiliser, vous pouvez utiliser votre numéro de téléphone au lieu de "deviceId".

 mFirebaseDatabaseRefrence.orderByChild("deviceId").equalTo(deviceId).addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.getValue() != null) {
                    Log.d(TAG, "Datasnap Shots: " + dataSnapshot.getValue());
                      /* if alredy exist and check for first time, second time isExist=true*/
                    if (!isExist) {

                        for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                            UserbasicInfo user = userSnapshot.getValue(UserbasicInfo.class);
                              Toast.makeText(UserInfoActivity.this, "User already exist...!", Toast.LENGTH_SHORT).show();

                        }

                    }
                    isExist = true;
                } else {
                    isExist = false;
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        /*if not exist add data to firebase*/
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                Log.d(TAG, "isExist: " + isExist);
                if (!isExist) {
                    addDataToDB(false);
                } else {
                    addDataToDB(true);

                }
            }
        };
        new Handler().postDelayed(runnable, 5000);
2
Khyati Chitroda

Pour la solution,

Après l'inscription, veuillez saisir une entrée dans la base de données qui crée l'identité de l'utilisateur. Ainsi, la prochaine fois, vous pourrez identifier l'utilisateur déjà inscrit.

Après vérification de la vérification OTP dans la base de données RealTime, le numéro de mobile existe déjà, il doit donc déjà saisir ce numéro de téléphone particulier.

1
Dhaval Solanki

J'ai traité de cette façon. Firebase crée une exception en cas d'erreur d'erreur lors de l'authentification et d'autres éléments non valides. Nous devons simplement les gérer et en informer l'utilisateur.

exemple de code:

    private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "signInWithCredential:success");
                        //do something on success
                    } else {
                        //handle the error here
                        showInfoToUser(task)
                        }
                    }
                }
            });
}

et vérifiez quel type d'erreur nous obtenons en vérifiant les exceptions ici

 private void showInfoToUser(Task<AuthResult> task) {
    //here manage the exceptions and show relevant information to user
    hideProgressDialog();
    if (task.getException() instanceof FirebaseAuthUserCollisionException) {
        showSnackBar(getString(R.string.user_already_exist_msg));
    } else if (task.getException() instanceof FirebaseAuthWeakPasswordException) {
        showSnackBar(task.getException().getMessage());
    } else if (task.getException() instanceOf FirebaseAuthInvalidCredentialsException){
        //invalid phone /otp
        showSnackBar(task.getException().getMessage());
    }
    else {
        showSnackBar(getString(R.string.error_common));
    }
}
0
vikas kumar