webentwicklung-frage-antwort-db.com.de

Firebase Auth - mit E-Mail und Passwort - Überprüfen Sie den Benutzer bereits registriert

Ich möchte überprüfen, wann ein Benutzer versucht, sich mit createUserWithEmailAndPassword() in der Firebase-Benutzerauthentifizierungsmethode anzumelden. Dieser Benutzer ist bereits in meiner App registriert. 

Registered Users

10
Coolbub

Wenn der Benutzer versucht, einen Benutzer mit derselben E-Mail-Adresse zu erstellen, lautet die Antwort der Aufgabe "Antwort: Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet." 

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

Um festzustellen, ob ein Benutzer mit dieser E-Mail-Adresse bereits existiert, können Sie feststellen, dass der Aufruf von createUserWithEmailAndPassword () mit auth/email-already-in-use fehlschlägt. Ich sehe, dass @Srinivasan gerade eine Antwort dazu gepostet hat.

Alternativ können Sie feststellen, dass eine E-Mail-Adresse bereits verwendet wird, indem Sie fetchSignInMethodsForEmail() (zuvor angerufenes fetchProvidersForEmail() ) aufrufen. 

11

Zunächst müssen Sie sicherstellen, dass diese Einschränkung in der Firebase-Konsole aktiviert ist (Einstellungen für Konto und E-Mail-Adresse). Sehen Sie sich die Antwort von @ Srinivasan an.

Dann machen Sie dies in Ihrem Java-Code:

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

                        // ...
                    }
                });

Hier passiert der Trick:

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

Bei der Registrierung eines Benutzers mit E-Mail-Adresse und Kennwort können mehrere Ausnahmen ausgelöst werden. Die einzige, an der wir interessiert sind, ist FirebaseAuthUserCollisionException. Wie der Name schon sagt, wird diese Ausnahme ausgelöst, wenn die E-Mail bereits existiert. Wenn die ausgelöste Ausnahme eine Instanz dieser Klasse ist, informieren Sie den Benutzer.

6

Als Praxis von @ Franks Antwort ist hier der Code der Verwendung von 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

Ich habe nach dieser Art von Bedingung gesucht, unter der wir erkennen können, ob ein Benutzer existiert oder nicht, und eine Registrierung und Anmeldung durchführt. fetchProvidersForEmail ist jetzt die beste Option. Ich habe dieses Tutorial gefunden. Hoffe es hilft dir auch!

3
Akshay Taru

Siehe: Benutzer verwalten

UserRecord userRecord = FirebaseAuth.getInstance().getUserByEmail(email);
System.out.println("Successfully fetched user data: " + userRecord.getEmail());

Diese Methode gibt ein UserRecord-Objekt für den Benutzer zurück, das der angegebenen E-Mail entspricht.

Wenn die angegebene E-Mail nicht zu einem vorhandenen Benutzer gehört oder der Benutzer aus einem anderen Grund nicht abgerufen werden kann, gibt das Admin-SDK einen Fehler aus. Eine vollständige Liste der Fehlercodes, einschließlich Beschreibungen und Lösungsschritten, finden Sie unter Admin Authentication API Errors .

1
Nishesh Jain

Fügen Sie den folgenden Code zu MainActivity.Java file hinzu. Wenn der Benutzer versucht, sich mit derselben E-Mail-Adresse zu registrieren, wird die Nachricht "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet" als Toast angezeigt.

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