使用错误的验证码进行身份验证时出现例外问题

时间:2018-01-05 17:29:52

标签: android firebase firebase-authentication

我正在使用 Firebase Phone Authentification 来验证用户帐户。当我尝试使用错误的验证码进行身份验证时,我收到IllegalArgumentException。有没有办法在不使用try catch块的情况下解决这个问题?

以下是异常消息:

java.lang.IllegalArgumentException: Cannot create PhoneAuthCredential without either verificationProof, sessionInfo, or temporaryProof.
                                                                 at com.google.android.gms.common.internal.zzbq.checkArgument(Unknown Source)
                                                                 at com.google.firebase.auth.PhoneAuthCredential.<init>(Unknown Source)
                                                                 at com.google.firebase.auth.PhoneAuthProvider.getCredential(Unknown Source)
                                                                 at com.example.myApp.testFragment$3$4.onClick(testFragment.java:316)
                                                                 at android.view.View.performClick(View.java:5197)
                                                                 at android.view.View$PerformClick.run(View.java:20926)
                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                 at android.os.Looper.loop(Looper.java:145)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5951)
                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

以下是我收到错误的行:

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationCode, inputCode);

我故意在inputCode中使用错误的验证码,并希望收到错误消息而不是异常。

4 个答案:

答案 0 :(得分:3)

致电PhoneAuthProvider.getCredential(...)会返回PhoneAuthCredential object,其定义为:

  

包含电话号码和验证信息以进行身份​​验证。

因此getCredential()无法返回错误消息。相反,如果您提供的验证/凭据信息有问题,它会抛出异常。

答案 1 :(得分:1)

我遇到了同样的错误,只需添加SHA证书。错误会消失。

答案 2 :(得分:0)

它返回一个异常,因此目的应该是捕获它在调试控制台中引发的异常。为此,我将代码的一部分包裹在try catch中,然后将其吐给目标用户,而不是普通的崩溃(最终用户看不到)。

喜欢这个...

private void verifyCode(String code) {
    try {
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
        signInWithCredential(credential);
    }catch (Exception e){
        Toast toast = Toast.makeText(this, "Verification Code is wrong", Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER,0,0);
        toast.show();
    }

}

答案 3 :(得分:0)

我遇到了同样的问题,并已解决。实际上,您需要检查verifyId并且代码不为空

谢谢。