我正在将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问题。
答案 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();
}
}
});
}