如何从 Firebase Task<AuthResult> 登录失败中检索错误代码?
Posted
技术标签:
【中文标题】如何从 Firebase Task<AuthResult> 登录失败中检索错误代码?【英文标题】:How do you retrieve the error code from a Firebase Task<AuthResult> unsuccessful login? 【发布时间】:2016-10-21 14:00:33 【问题描述】:我目前想知道在使用Firebase
登录失败后如何获得错误代码。从他们的遗留代码中,您可以在下面的链接中看到:
https://www.firebase.com/docs/android/guide/user-auth.html#section-handling-errors
@Override
public void onAuthenticationError(FirebaseError error)
switch (error.getCode())
case FirebaseError.USER_DOES_NOT_EXIST:
// handle a non existing user
break;
case FirebaseError.INVALID_PASSWORD:
// handle an invalid password
break;
default:
// handle other errors
break;
您将获得一个onAuthenticationError
,然后可以专门分析FirebaseError
以向用户产生不同的反馈错误。然而,由于他们最近发布了他们的新 API,我已经开始使用它。这是我现在必须使用的代码:
@Override
public void onComplete(@NonNull Task<AuthResult> task)
//If authentication fails
if (!task.isSuccessful())
// Handle the specific individual errors such as incorrect passwords
不幸的是,我不确定如何从Task<AuthResult>
对象中收集特定的错误代码。我知道我可以收集 Exception
和 Toast
这条消息,但我更愿意在正确的错误代码上执行切换,而不是使用 String
解释发生的错误。
【问题讨论】:
你可以参考我这里的回答,我觉得会很有帮助***.com/a/37860491/5303797 不要使用FirebaseError
类,因为来自文档 Represents API errors. This is for internal usage only and we don't expose externally.
【参考方案1】:
如果您的代码已经有 onCompleteListener,那么我不建议您添加 onFailureListner 只是获取有关异常的信息,因为它会增加侦听器的数量。 您可以得到如下错误代码和消息。
@Override
public void onComplete(@NonNull Task<AuthResult> task)
//If authentication fails
if (!task.isSuccessful())
String message = task.getException().getMessage();
String localizedMessage = task.getException().getLocalizedMessage();
String errorCode = ((FirebaseAuthInvalidUserException) task.getException()).getErrorCode();
我会建议使用本地化消息而不是只使用消息,因为本地化消息很短并且有足够的信息来解决错误。
【讨论】:
【参考方案2】:您必须添加onFailureListner()
使用下面的代码,您可以获得错误代码:
.addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
if (e instanceof FirebaseAuthInvalidCredentialsException)
notifyUser("Invalid password");
else if (e instanceof FirebaseAuthInvalidUserException)
String errorCode =
((FirebaseAuthInvalidUserException) e).getErrorCode();
if (errorCode.equals("ERROR_USER_NOT_FOUND"))
notifyUser("No matching account found");
else if (errorCode.equals("ERROR_USER_DISABLED"))
notifyUser("User account has been disabled");
else
notifyUser(e.getLocalizedMessage());
);
您应该开发的notifyUser() 方法可以显示Toast 或snackbar 或对话框
【讨论】:
【参考方案3】:我曾为此苦苦挣扎,但找到了答案。试一试:
@Override
public void onComplete(@NonNull Task<AuthResult> task)
if (task.isSuccessful())
Toast.makeText(activity, "Authentication completed.",
Toast.LENGTH_SHORT).show();
else
Toast.makeText(activity, "Authentication failed:" +
task.getException(), Toast.LENGTH_SHORT).show();
获取我使用的异常:task.getException()
。
祝你好运
【讨论】:
【参考方案4】:更好用
task.getException().getMessage()
为用户获取格式正确的消息
【讨论】:
以上是关于如何从 Firebase Task<AuthResult> 登录失败中检索错误代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 firebase.auth().onAuthStateChanged 中提取数据
如何从 firebase_auth 测试“signInWithEmailAndPassword”
如何从 Firebase.auth.currentUser Android Kotlin 获取刷新令牌