Как отправлять электронную почту для сброса пароля только тогда, когда у провайдера есть электронная почта / пароль - PullRequest
1 голос
/ 29 сентября 2019

У меня есть следующее:

public void sendEmailToExistingUser(String email) {
    mAuth.sendPasswordResetEmail(email).addOnCompleteListener(task -> {
        if (task.isSuccessful()) emailSent.setValue(true);
    });
}

Задача выполнена успешно, даже если ранее зарегистрированный пользователь имеет другого провайдера, например: Facebook.
Это отправленное письмо будет не сброшено логин на Facebook, если пользователь уже заходил в Facebook, и я не хочу сбрасывать пароль на фейсбуке.

РЕДАКТИРОВАТЬ: Насколько я понимаю, случай забытого пароля всегда происходит до входа в систему, поэтому getCurrentUser () всегда имеет значение null.

Вопрос: Могу ли я добавить условие, чтобы избежать отправки электронной почты, если идентификатор провайдера не является адресом электронной почты / паролем для firebase?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Рассмотрите возможность использования fetchSignInMethodsForEmail. Будет выполнен поиск соответствующих методов входа для предоставленной электронной почты.

Однако имейте в виду, что сброс пароля может иногда использоваться для пользователей без пароля в качестве средства для восстановления своей учетной записи или если пользователь забыл, чтоони ранее входили в Google и т. д. Скорее всего, пользователь может предупредить пользователя перед сбросом, что он ранее вошел в систему с указанным поставщиком.

1 голос
/ 29 сентября 2019

Да, вы можете получить текущего пользователя и проверить его провайдера.

public void sendEmailToExistingUser(String email) {
    boolean isEmailPassword = false;

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if (user != null) {
        for (UserInfo profile : user.getProviderData()) {
            // Id of the provider (ex: google.com)
            String providerId = profile.getProviderId();
            if (providerId.equals("password")) {
                isEmailPassword = true;
            }
        }
    }

    if (isEmailPassword) {
        mAuth.sendPasswordResetEmail(email).addOnCompleteListener(task -> {
            if (task.isSuccessful()) emailSent.setValue(true);
        });
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...