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

Flutter Firebase电话身份验证不工作

袁阿苏
2023-03-14

电话身份验证失败,出现以下异常:

PlatformException(ERROR_SESSION_EXPIRED,sms代码已过期。请重新发送验证码重试。,null)

但如果我使用的电话号码不同于我的电话号码,它就会起作用。我从play store中添加了SHA-1和SHA-256指纹到firebase,并替换了google-services.json。

这是我的代码:

 void _verifyPhoneNumber() async {
    setState(() {
       isVerified=true; 
      });
    setState(() {
      _message = '';
    });
    final PhoneVerificationCompleted verificationCompleted =
        (AuthCredential phoneAuthCredential) {
      _auth.signInWithCredential(phoneAuthCredential);
      setState(() {
        _message = 'Received phone auth credential: $phoneAuthCredential';

      });
    };

    final PhoneVerificationFailed verificationFailed =
        (AuthException authException) {
        _message =
            'Phone number verification failed';

    };

    final PhoneCodeSent codeSent =
        (String verificationId, [int forceResendingToken]) async {
      _verificationId = verificationId;

    };

    final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
        (String verificationId) {
      _verificationId = verificationId;
    };

    await _auth.verifyPhoneNumber(
        phoneNumber: '+91'+_phoneNumberController.text,
        timeout: const Duration(seconds: 5),
        verificationCompleted: verificationCompleted,
        verificationFailed: verificationFailed,
        codeSent: codeSent,
        codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
  }

  // Example code of how to sign in with phone.
  void _signInWithPhoneNumber() async {
    setState(() {
      isLoading=true;
    });
    final AuthCredential credential = PhoneAuthProvider.getCredential(
      verificationId: _verificationId,
      smsCode: _smsController.text,
    );
    try{
      firebaseUser =
        (await _auth.signInWithCredential(credential)).user;
    final FirebaseUser currentUser = await _auth.currentUser();
    assert(firebaseUser.uid == currentUser.uid);
      if (firebaseUser != null) {
.....

      } else {

        _message = 'Sign in failed';
        showErrorDialog();
      }

    }catch (e){
      showErrorDialog();
    }
    setState(() {
      isLoading=false;
    });
  }

共有2个答案

百里嘉泽
2023-03-14

对,尽管timeout属性是60S。但在收到验证码并立即粘贴代码后,error_session_expired喜欢你。注意:只在安卓系统上,只收到几个电话号码。

燕和裕
2023-03-14

不确定您的问题,但它显示:ERROR_SESSION_EXPIRED,sms代码已过期,并且在_auth.verifyPhoneNumber()中,您的超时持续时间相当短。试试60秒。

await _auth.verifyPhoneNumber(
        phoneNumber: '+91${_phoneNumberController.text}',
        timeout: Duration(seconds: 60),
        verificationCompleted: verificationCompleted,
        verificationFailed: verificationFailed,
        codeSent: codeSent,
        codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);

如果这不能帮你看看文件。

 类似资料:
  • keytool-list-v-keystore my_keystore.jks

  • 我遵循了认证教程,但遇到了一些问题。 它不能将变量传递给导入的函数。

  • 但我有以下错误 {“错误”:{“代码”:403,“消息”:“来自此ios客户端应用程序的请求被阻止。”,“错误”:[{“消息”:“来自此ios客户端应用程序的请求被阻止。”,“域”:“全局”,“原因”:“禁止”}],“状态”:“允许_Denied”}} 我已经实现了这一点,正如文档中所示。 下面是AppDelegate.swift的代码: 下面是ViewController.swift的代码:

  • 问题内容: 我正在尝试将我的电话号码与我的电子邮件密码身份验证相关联。所以我使用以下步骤建立我的注册: 用户输入电子邮件地址和密码。 然后我打电话 那么我需要将当前帐户与电话号码相关联,因此我正在使用 但是,我没有看到任何链接。在我的Firebase控制台中创建的2个帐户和当前用户的详细信息中只有电话号码。当我再次使用电子邮件和密码登录并检查用户详细信息时,电话号码不存在! 请在下面找到我的代码:

  • 假设我需要通过Firebase电话身份验证来验证用户。但不知何故,用户没有得到otp短信。那么firebase是否提供了通过接收呼叫获取OTP的选项?