Flutter Firebase报错:需提供multiFactorInfo,如何从firebase_auth获取?
解决Firebase双因素认证中multiFactorInfo的获取问题
要获取multiFactorInfo,你得从当前用户已注册的多因素认证方式列表里拿——Firebase会把用户添加过的所有双因素认证方式存在currentUser!.multiFactor.enrolledFactors里,这个列表里的每一项都是MultiFactorInfo对象。
具体操作步骤:
- 先获取当前用户的已注册多因素认证列表
- 根据业务场景选择对应的
MultiFactorInfo(比如用户只绑定了一个手机号,直接取第一个;如果有多个,可以根据手机号或备注筛选)
修改你的代码如下:
final session = await FirebaseAuth.instance.currentUser!.multiFactor.getSession(); // 获取用户已注册的多因素认证方式列表 final enrolledFactors = FirebaseAuth.instance.currentUser!.multiFactor.enrolledFactors; // 假设用户只绑定了一个手机号作为双因素认证方式,取第一个即可 // 若有多个,可按手机号/备注筛选,示例: // final targetFactor = enrolledFactors.firstWhere((factor) => factor.phoneNumber == "目标手机号"); MultiFactorInfo? multiFactorInfo = globalIs2FactorAuth == true ? enrolledFactors.first : null; await FirebaseAuth.instance.verifyPhoneNumber( phoneNumber: globalIs2FactorAuth != true ? phone.toString() : null, multiFactorSession: globalIs2FactorAuth == true ? session : null, multiFactorInfo: multiFactorInfo, timeout: Duration(seconds: 60), verificationCompleted: verificationCompleted, verificationFailed: verificationFailed, codeSent: codeSent, codeAutoRetrievalTimeout: codeAutoRetrievalTimeout) .then((value) {
注意:
enrolledFactors仅包含用户已成功添加的多因素认证方式,所以双因素认证流程启动前,用户必须先完成至少一种多因素方式的绑定(比如先绑定手机号),否则列表为空,需先引导用户添加。- 若支持用户绑定多个手机号,务必做好筛选,确保拿到的是用户当前要验证的那一项对应的
MultiFactorInfo。
内容的提问来源于stack exchange,提问作者Bernhard
相关产品推荐
相关产品推荐

