web-dev-qa-db-de.com

Firebase - So prüfen Sie, ob sich ein Benutzer bereits mit der Telefonnummer angemeldet hat

Ich verwende die Firebase-Telefonauthentifizierung. Wenn ein Benutzer ein Konto unter Verwendung der Telefonnummer erstellt und das nächste Mal ein Konto mit derselben Telefonnummer erstellt Dann möchte ich eine Nachricht anzeigen, dass das Konto bereits existiert 

5
Asad Mirza

Um festzustellen, ob diese Telefonnummer bereits für die Registrierung eines Kontos verwendet wurde , können Sie sich nicht nur auf die Standardauthentifizierungstabelle verlassen. Muss aber auch die Firebase-Datenbank verwenden, um eine Dummy-Benutzertabelle zum Prüfen zu erstellen .

Sie können beispielsweise einen JSON-Baum erstellen, um Benutzerdaten in der Echtzeitdatenbank in einer Struktur wie der folgenden zu speichern:

enter image description here

Und Ihr Code sollte ungefähr so ​​aussehen:

Auf dem Code der erfolgreichen Anmeldung/Benutzerregistrierung:

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();
     }
}
5
Philip Cheung

onTask Ergebnisprüfung FirebaseAuthUserCollisionException

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

Ich habe dies in mein Projekt getan und es funktioniert perfekt. Sie können dies verwenden. Sie können statt "deviceId" Ihre Telefonnummer verwenden.

 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

Für die Lösung

Geben Sie nach der Anmeldung einen Eintrag in der Datenbank ein, der den Benutzer identifiziert, damit Sie das nächste Mal die Benutzer identifizieren können, die sich bereits angemeldet haben.

Nach der OTP-Überprüfungsprüfung in der RealTime-Datenbank ist bereits eine Mobilnummer vorhanden, sodass ansonsten bereits eine Eingabe dieser bestimmten Mobilnummer erfolgt.

1
Dhaval Solanki

Ich habe diesen Weg gemacht. Firebase löst eine Ausnahme aus, wenn während der Authentifizierung einige Fehler aufgetreten sind, und andere ungültige Dinge, die wir nur behandeln und den Benutzer benachrichtigen müssen.

beispielcode:

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

und prüfen Sie, welche Art von Fehlern wir erhalten, indem Sie hier Ausnahmen prüfen

 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