2016-06-14 6 views
3

Android 앱을 이전 Firepoint 플랫폼으로 옮깁니다. 나는 sendPasswordResetEmail이 알려지지 않은 이메일 문자열이 주어지면 이메일/패스워드 인증을 위해 문서화 된 것처럼 작동하는 것처럼 보이지 않는다.firebase-auth에서 Firebase sendPasswordResetEmail이 올바르게 작동하지 않는 것 같습니다 : 9.0.2

문서는 말한다 :

public Task sendPasswordResetEmail (String email)

Triggers the Firebase Authentication backend to send a password-reset email to the given email address, which must correspond to an existing user of your app.

Exceptions:

FirebaseAuthInvalidUserException thrown if there is no user corresponding to the given email address Returns Task to track completion of the sending operation

여기

내 PW 재설정 방법 :

LoginActivity.java:117: error: exception FirebaseAuthInvalidUserException is never thrown in body of corresponding try statement } catch(FirebaseAuthInvalidUserException e) {

:

// 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 또한 플래그)의 원인

try-catch 코드를 생략하면 메서드가 컴파일되지만 반환 된 작업은 알고있는 경우에도 성공하지 못합니다. od 이메일 주소.

좋은 소식은 Firebase가 결국 좋은 주소로 재설정을 보내지 만 유효한 전자 메일이 주어지면 알려지지 않은 사용자 이메일 또는 성공적인 작업이 주어지면 sendPasswordResetEmail이 문서화 된 예외를 throw하지 않는 이유가 궁금합니다.

5 월 18 일 릴리스 노트에서이 기능과 함께 IOS 문제가 있음을 확인했습니다.

답변

8

FirebaseAuth.sendPasswordResetEmail(...)Task을 반환합니다.

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 
     } 
    }); 
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(); 
         } 
        } 
       }); 
    } 
을 사용 할