Firebase - How to check whether a user has already signed up using Phone Number

后端 未结 7 1490
梦毁少年i
梦毁少年i 2021-01-04 02:57

I am using firebase phone Authentication . When a user creates a account using phone number and next time he creates account with same phone number Than I want to show a m

相关标签:
7条回答
  • 2021-01-04 03:19

    onTask result check FirebaseAuthUserCollisionException

    if (task.getException() instanceof FirebaseAuthUserCollisionException) {
        Toast.makeText(Signup.this, "User already exist.",  Toast.LENGTH_SHORT).show();
    }
    
    0 讨论(0)
  • 2021-01-04 03:19
    DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("Users");
    userRef
        .orderByChild("phonenumber")
        .equalTo(mMobile.getText().toString())
        .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.getValue() != null) {
                    //it means user already registered
                    //Add code to show your prompt
                    OpenErrorAlrt("Mobile Number already registed");
                } else {
                    Intent intent = new Intent(getApplicationContext(), OTPVerifyActivity.class);
                    intent.putExtra("phonenumber", mMobile.getText().toString());
                    startActivity(intent);
                }
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });
    
    0 讨论(0)
  • 2021-01-04 03:27

    I have handled this way. Firebase throws some exception on having some error while authentication and other invalid things we just have to handle them and notify the user.

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

    and check what kind of error we are getting by checking exceptions here

     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 讨论(0)
  • 2021-01-04 03:30

    I have done this into my project and it is working perfectly, you can use this, you can use your phone number instead of "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);
    
    0 讨论(0)
  • In order to detect whether that phone number has already been used for account registration, you can't only rely on the default authentication table. But also has to use the Firebase database to create a Dummy user table for checking.

    For example, you can create a json tree to save user data in the realtime database in to something structured like this:

    And your piece of code should looks similar to:

    On the piece of code of successful login/user registration:

    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();
         }
    }
    
    0 讨论(0)
  • 2021-01-04 03:38

    For the solution,

    After signup please make some entry in Database which makes an identity of the user, so next time you can identify user already signup.

    After OTP verification check in RealTime database already Mobile number exists then so its already otherwise do an entry of that particular mobile number.

    0 讨论(0)
提交回复
热议问题