firebase - 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
解决方案
推荐阅读
- bash - Bash:检查工作是否完成
- sql-server - 在 SQL Server 中将列数据转换为行
- javascript - 当应用程序在后台运行时,Angular 8 FCM receiveMessage()不起作用
- r - R中的目录:读取文件
- postgresql - 将数据从 CSV 文件加载到 AWS Aurora Serverless (PostgreSQL) db
- python - 如何使箱形图水平?
- tensorflow - 保存 TF2 模型时出错:AttributeError: 'list' object has no attribute 'items'
- c# - 使用 ToggleButton 和附加属性更新 ListBox ItemTemplate
- javascript - 将特定国家/地区的 Google 搜索结果中的关键字数量提取到 Google 表格
- java - 我想将一个数字的数字单独存储在一个数组/数组列表中,并按给定的顺序写出来。任何建议我做错了什么?