sendPasswordResetEmail

sendPasswordResetEmail

我正在将一个android应用程序从旧的firebase平台迁移到新的firebase平台。如果给定一个未知的电子邮件字符串,我似乎无法让sendpasswordresetemail按文档所述进行电子邮件/密码身份验证。
文件上说:
公共任务SendPasswordResetEmail(字符串电子邮件)
触发firebase身份验证后端发送密码重置
电子邮件到给定的电子邮件地址,该地址必须与现有的
应用程序的用户。
例外情况:
如果没有用户,则引发firebaseauthInvalidUserException
对应于给定的电子邮件地址返回要跟踪的任务
发送操作完成
以下是我的pw重置方法:

 // firebase password reset
private void requestPwReset() {
    String email = mEmailView.getText().toString();
    Log.d(TAG, "sending pw reset request for: " + email);
    try {
        Task<Void> task = mAuth.sendPasswordResetEmail(email);
        Log.d("TAG", "result: " + (task.isSuccessful() == true) ); // NEVER SUCCEEDS, EVEN WITH VALID EMAIL ADDRESS
    } catch(FirebaseAuthInvalidUserException e) {  //COMPILE ERROR HERE!
        Log.d(TAG, "exception: " + e.toString());
    }
}

调用此方法会导致此编译时错误(IDE也会标记此错误):
Java:117:错误:异常
firebaseauthInvalidUserException从未在
相应的try语句
}捕获(firebaseauthInvalidUserException e){
如果我省略try-catch代码,则该方法会编译,但返回的任务永远不会成功,即使使用已知的良好电子邮件地址也是如此。
好消息是,firebase最终确实会发送一个重置到好地址,但是我想知道,如果给定一个未知的用户电子邮件,或者给定一个有效的电子邮件,那么sendpasswordresetemail为什么不抛出记录的异常。
我确实在5月18日的发行说明中看到了这个函数存在ios问题。

最佳答案

FirebaseAuth.sendPasswordResetEmail(...)返回aTask
Task表示异步完成的最终结果。这也是为什么当您在发出请求后立即检查它是否已完成时task.isSuccessful()将返回false的原因。
你应该做的是:
mauth.sendpasswordresetemail(电子邮件)
.addonSuccessListener(新建onSuccessListener(){
公共void onsuccess(void result){
//发送邮件成功
}
}).addonFailureListener(新的onFailureListener(){
公共onfailure(异常e)
/发生了一些不好的事情
}
(});

07-25 23:51