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

时间:2016-06-14 21:28:53

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

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

  

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

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

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

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

2 个答案:

答案 0 :(得分:11)

FirebaseAuth.sendPasswordResetEmail(...)会返回Task

Task表示异步完成的最终结果。这也是task.isSuccessful()在您发出请求后检查是否已立即完成false时返回Sub Tester() Dim s As Worksheet For Each s In ThisWorkbook.Worksheets Debug.Print s.Name, HasSheet("C:\Users\blah\Desktop\", "temp.xlsm", s.Name) Next s End Sub Function HasSheet(fPath As String, fName As String, sheetName As String) Dim f As String f = "'" & fPath & "[" & fName & "]" & sheetName & "'!R1C1" HasSheet = Not IsError(Application.ExecuteExcel4Macro(f)) End Function 的原因。

你应该做的是:

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

答案 1 :(得分:0)

简单的方法只需使用此功能

    private void resetPassword(final String email) {
        mAuth.sendPasswordResetEmail(email)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            Toast.makeText(mActivity, "Reset email instructions sent to " + email, Toast.LENGTH_LONG).show();
                        } else {
                            Toast.makeText(mActivity, email + " does not exist", Toast.LENGTH_LONG).show();
                        }
                    }
                });
    }