首页 > 解决方案 > Flutter Firebase linkWithCredential 不起作用

问题描述

我正在尝试将匿名用户链接到活动用户或使用 linkWithCredential 创建新用户 但是,我收到此错误

SMS 代码已过期。请重新发送验证码重试。

我尝试了多种方法,但结果是一样的。即使我尝试将 phoneCredential 设置为在 signOut 之前的旧 Auth 实例,但错误仍然出现。

signIn(context,
      {required String smsOTP,
      required UserDataProvider userDataProvider}) async {
    this.context = context;
    
    User? user = FirebaseAuth.instance.currentUser;


    Miscellaneous.showLoader(context, this);
    try {
      final AuthCredential credential = PhoneAuthProvider.credential(
          verificationId: verificationId, smsCode: smsOTP);

      if (user == null) {
        auth.signInWithCredential(credential).then((value) {
          getUserDetailToken(context, value.user!, userDataProvider);
        }).catchError((error) {
          FirebaseAuthException firebaseAuthException = error;
    FirebaseAuth authOld  = FirebaseAuth.instance;
    if (firebaseAuthException.code == "credential-already-in-use") {
      FirebaseAuth.instance.signOut(); // sign out before reverification
      userAlreadyPresentInFirebase(authOld,credential, userDataProvider);
          Miscellaneous.dismissLoader(context);
        });
      } else {
        user.linkWithCredential(credential).then((value) {
          getUserDetailToken(context, value.user!, userDataProvider);
        }).catchError((error) {
                      FirebaseAuthException firebaseAuthException = error;
    FirebaseAuth authOld  = FirebaseAuth.instance;
    if (firebaseAuthException.code == "credential-already-in-use") {
      FirebaseAuth.instance.signOut(); // sign out before reverification
      userAlreadyPresentInFirebase(authOld,credential, userDataProvider);
          Miscellaneous.dismissLoader(context);
        });
      }
    } 
  }


      void userAlreadyPresentInFirebase( FirebaseAuth authOld , AuthCredential credential, UserDataProvider userDataProvider)
      async {
        Miscellaneous.logMessage(
            Tag, "userAlreadyPresentInFirebase>>>");
        //reLogin user and don't link auth id of anonymous user
//Breaks here !!!!!!!!!
        await FirebaseAuth.instance.signInWithCredential(credential).then((value) {
          getUserDetailToken(context,value.user!, userDataProvider);
          Miscellaneous.logMessage(Tag, auth.currentUser.toString());
        }).catchError((error) {
          FirebaseAuthException firebaseAuthException = error;
          Miscellaneous.logMessage(Tag, "catchError $error");
          if (errorMessage == 'invalid-verification-code') {
            Miscellaneous.showMessage(context, firebaseAuthException.message!);
          } else {
            if (firebaseAuthException != null) {
              if (firebaseAuthException.message != null) {
                Miscellaneous.showMessage(context, firebaseAuthException.message!);
              } else {
                Miscellaneous.showMessage(context, StringClass.somethingWentWrong);
              }
            } else {
              Miscellaneous.showMessage(context, StringClass.somethingWentWrong);
            }
          }
  
          Miscellaneous.dismissLoader(context);
        }).timeout(Duration(seconds: 30), onTimeout: () {
          Miscellaneous.dismissLoader(context);
          return;
        });
      }

运行应用程序的设备一加 7T Android 11

标签: firebaseflutterfirebase-authentication

解决方案


推荐阅读