如何仅在提供者为电子邮件/密码时发送密码重置电子邮件

时间:2019-09-29 18:28:37

标签: android firebase firebase-authentication

我有以下内容:

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

即使先前注册的用户具有其他提供者,例如Facebook,该任务也会成功。
如果用户过去使用Facebook登录过,那么发送的电子邮件将不重置,而我不想重置Facebook密码。

编辑:我的理解是,忘记密码的情况总是在登录之前发生,因此getCurrentUser()始终为null。

问题:我可以添加一个条件来避免在提供者ID不是Firebase电子邮件/密码时发送电子邮件吗?

2 个答案:

答案 0 :(得分:2)

请考虑使用fetchSignInMethodsForEmail。它将为提供的电子邮件查找相关的登录方法。

但是,请记住,有时密码重置可以用于非密码用户,以恢复其帐户,或者如果用户忘记了他们先前使用Google登录的信息,等等。您可能会在用户之前警告用户重置他们以前使用指定提供商登录的信息。

答案 1 :(得分:1)

是的,您可以检索当前用户并检查其提供者。

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