Firebase Auth - с электронной почтой и паролем - проверка зарегистрированного пользователя

Я хочу проверить, когда пользователь пытается зарегистрироваться с помощью createUserWithEmailAndPassword() в методе проверки подлинности пользователя Firebase, этот пользователь уже зарегистрирован в моем приложении.

Registered Users

Ответ 1

Чтобы определить, существует ли пользователь с таким адресом электронной почты, вы можете определить, когда произошел сбой вызова на createUserWithEmailAndPassword () с помощью auth/email-already-in-use. Я вижу, что @Srinivasan только что опубликовал ответ на этот вопрос.

Кроме того, вы можете определить, что адрес электронной почты уже используется, позвонив по адресу fetchSignInMethodsForEmail() (предыдущий - fetchProvidersForEmail()).

Ответ 2

Когда пользователь пытается создать пользователя с тем же адресом электронной почты, ответ задачи будет "Ответ: адрес электронной почты уже используется другой учетной записью".

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 Дополнительные настройки

Ответ 3

Прежде всего, вы должны убедиться, что это ограничение включено в консоли Firebase (настройки учетной записи и адреса электронной почты). Взгляните на ответ @Srinivasan.

Затем сделайте это в своем 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));
                        }

                        // ...
                    }
                });

Здесь происходит трюк:

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

При регистрации пользователя с электронной почтой и паролем могут быть сброшены несколько исключений, но мы заинтересованы в FirebaseAuthUserCollisionException. Как следует из названия, это исключение вызывается, если почта уже существует. Если созданное исключение является экземпляром этого класса, сообщите об этом пользователю.

Ответ 4

Как следует из практики @Frank, здесь приведен код использования 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];
            }

Ответ 5

Я изучал такое состояние, в котором мы можем обнаружить, существует ли пользователь или нет, и выполнять регистрацию и логин. fetchProvidersForEmail - лучший вариант прямо сейчас. Я нашел этот учебник. Надеюсь, это тоже поможет!

Ответ 6

Смотрите: Управление пользователями

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

Этот метод возвращает объект UserRecord для пользователя, соответствующий предоставленной электронной почте.

Если предоставленное электронное письмо не принадлежит существующему пользователю или пользователь не может быть выбран по любой другой причине, Admin SDK выдает ошибку. Полный список кодов ошибок, включая описания и шаги по устранению, см. в разделе Ошибки API аутентификации администратора.

Ответ 7

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

Ответ 8

Добавьте ниже код в файл MainActivity.java. Когда пользователь попытается зарегистрировать с тем же адресом электронной почты, появится сообщение "Адрес электронной почты уже используется другой учетной записью", появится как Тост

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

                }
            });

Ответ 9

Вам не нужно ничего делать, потому что бэкэнд Firebase выполнит эту работу.

Если вы не ссылаетесь на повторную аутентификацию приложения. Возьмем сценарий для примера, w