使用firebase-auth:9.0.2,Firebase sendPasswordResetEmail似乎无法正常工作

Jim*_*xas 6 android firebase-authentication

我正在将Android应用程序从旧版本迁移到新的Firebase平台.如果给出一个未知的电子邮件字符串,我似乎无法使sendPasswordResetEmail按照电子邮件/密码身份验证的文档工作.

文件说:

public Task sendPasswordResetEmail(String email)

触发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());
    }
}
Run Code Online (Sandbox Code Playgroud)

调用此方法会导致此编译时错误(IDE也会标记):

LoginActivity.java:117:错误:异常FirebaseAuthInvalidUserException永远不会在相应的try语句的主体中抛出} catch(FirebaseAuthInvalidUserException e){

如果我省略了try-catch代码,那么该方法将编译,但返回的任务永远不会成功,即使已知良好的电子邮件地址也是如此.

好消息是Firebase最终会将重置发送到好的地址,但我想知道为什么如果给出一个有效的电子邮件,如果给出一个未知的用户电子邮件或一个成功的Task,sendPasswordResetEmail不会抛出记录的异常.

我确实在5月18日的发行说明中看到这个功能存在iOS问题.

Spa*_*arq 12

FirebaseAuth.sendPasswordResetEmail(...)返回一个任务.

A Task表示异步完成的最终结果.这也是为什么在您提出请求后检查它是否已立即完成时task.isSuccessful()将返回的原因false.

你应该做的是:

mAuth.sendPasswordResetEmail(email)
  .addOnSuccessListener(new OnSuccessListener() {
      public void onSuccess(Void result) {
        // send email succeeded
      }
   }).addOnFailureListener(new OnFailureListener() {
      public onFailure(Exception e)
        // something bad happened
      }
   });