当前位置: 首页 > 知识库问答 >
问题:

手动验证Firebase otp

安明亮
2023-03-14

我正在寻找一种方法来查找从Firebase电话身份验证发送给我的代码,因为我想手动验证该代码。现在的问题是Firebase正在自动检测短信并调用onVerficationComplted(),但我有一个按钮,我想手动输入otp代码并验证。下面是我的代码。如果有任何帮助,将不胜感激。谢谢

PhoneAuthProvider.getInstance().verifyPhoneNumber(
                phonenumber,
                120,
                TimeUnit.SECONDS,
                this, new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
                Intent intent = new Intent(PhoneVerification.this, PictureActivity.class);
                Log.e("iamhere","Credential  IS"+phoneAuthCredential);
                intent.putExtra("email",email);
                intent.putExtra("phoneNumber",phonenumber);
                intent.putExtra("password",password);
                startActivity(intent);
                Toast.makeText(PhoneVerification.this, "Please fill the registration form", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onVerificationFailed(@NonNull FirebaseException e) {
                Toast.makeText(PhoneVerification.this, "Failed: "+e.getMessage(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                super.onCodeSent(s, forceResendingToken);
                Toast.makeText(PhoneVerification.this, "Check your phone for verification code", Toast.LENGTH_LONG).show();
                String mVerificationId = s;
            }
        });

共有1个答案

督劲
2023-03-14

如果没有自动检测到代码,用户必须通过EditText手动输入

    loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String txt = otpEditText.getText().toString().trim();
                if (txt.isEmpty() || txt.length() < 6) {
                    otp.setError("Enter valid code");

                    return;
                }

                //verifying the code entered manually
                if (isOnline()) {
                    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, txt);

                    signInWithPhoneAuthCredential(credential);
                } else {
                    showSnack(relativeLayout, "Unable to connect! Check internet connection");
                }
            }
        });



private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(Verification.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        //verification successfull do next task
                    } else {

                        //verification unsuccessful.. display an error message


                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            Toast.makeText(Verification.this, "Incorrect OTP entered", Toast.LENGTH_LONG).show();

                        } else {
                            Toast.makeText(Verification.this, "Unable to verify please retry later", Toast.LENGTH_LONG).show();


                        }


                    }
                }
            });
}

以下是自动验证:

 private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    @Override
    public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {

        //Getting the code sent by SMS
        String code = phoneAuthCredential.getSmsCode();

        //sometime the code is not detected automatically
        //in this case the code will be null
        //so user has to manually enter the code
        if (code != null) {
            otpEditText.setText(code);
            //verifying the code
            verifyVerificationCode(code);
        }
    }

    @Override
    public void onVerificationFailed(FirebaseException e) {
        FancyToast.makeText(Verification.this, e.getMessage(), FancyToast.LENGTH_LONG, FancyToast.CONFUSING, false).show();
    }

    @Override
    public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
        super.onCodeSent(s, forceResendingToken);

        //storing the verification id that is sent to the user
        mVerificationId = s;
    }
};

查看Firebase文档了解更多信息。

 类似资料:
  • 本文向大家介绍jQuery Validation Plugin验证插件手动验证,包括了jQuery Validation Plugin验证插件手动验证的使用技巧和注意事项,需要的朋友参考一下 jquery.validate是jquery旗下的一个验证框架,借助jquery的优势,我们可以迅速验证一些常见的输入,并且可以自己扩充自己的验证方法,并且对国际化也有很好的支持。 正常的验证模式如下: 这样

  • 本文向大家介绍AngularJS手动表单验证,包括了AngularJS手动表单验证的使用技巧和注意事项,需要的朋友参考一下 所谓手动验证是通过AngularJS表单的属性来验证,而成为AngularJS表单必须满足两个条件: 1、给form元素加上novalidate="novalidate"; 2、给form元素加上name="theForm", 如下: ● 给form加上novalidate=

  • X2.3.0新增(暂时无法使用) sp_check_mobile_verify_code($mobile='',$verifycode='') 功能: 手机验证码检查,验证完后销毁验证码增加安全性 参数: $mobile: 手机号 $verifycode:验证码 返回: 类型boolean true:手机验证码正确,false:手机验证码错误 使用: $is_right_mobile_code

  • 本文向大家介绍AngularJS实现表单手动验证和表单自动验证,包括了AngularJS实现表单手动验证和表单自动验证的使用技巧和注意事项,需要的朋友参考一下 AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证。 一、手动验证 所谓手动验证是通过AngularJS表单的属性来验证。而成为AngularJS表单必须满足两个条件: 1、给form元素加上novalidate="no

  • 问题内容: 我正在使用Hibernate和Spring Annotations进行很多验证,如下所示: 然后在控制器中,在参数中调用它: 但是我想根据控制器方法中的某些逻辑来决定使用的组。有没有办法手动调用验证?像什么? 我知道要创建自己的Validator类,但是这是我要避免的事情,我宁愿只在类变量本身上使用批注。 问题答案: 比 Jaiwo99 更进一步: 如果您有兴趣,还可以指向SmartV

  • 问题内容: 从JSON请求正文创建POJO字段时,带注释的spring验证有效。但是,当我手动(使用设置器)创建同一对象并想要触发验证时,我不确定该怎么做。 这是Registration类,它具有可以构建对象的Builder内部类。在构建方法中,我想触发弹簧验证。请滚动到底部并检查Builder.build()和Builder.valiate()方法以查看当前的实现。我正在使用javax.vali