Flutter Firebase重新认证异常仍执行删除流程,如何修复?
修复Firebase重新认证的条件执行逻辑
你的问题核心是异步方法未等待执行完成:reauthenticateWithCredential是异步操作,但你没加await关键字,导致它在后台运行时,代码直接跳过并继续执行后续的删除和导航操作——哪怕认证失败,错误也不会被当前的try/catch捕获。
修复方案很简单,给异步认证方法加上await,让代码等待认证结果返回后再继续执行后续逻辑:
onPressed: () async { try { AuthCredential credential = EmailAuthProvider.credential( email: '', // 实际开发中要替换为用户输入的真实邮箱 password: '', // 同理替换为用户输入的密码 ); // 加上await,强制等待认证操作完成 await _firebaseAuth.currentUser!.reauthenticateWithCredential(credential); // 只有认证成功才会执行以下删除与导航操作 BlocProvider.of<ProfileBloc>(context).add(DeleteProfile( user: user, stingrays: stingrayState.stingrays, )); Navigator.pushNamed(context, '/wrapper/'); } on FirebaseAuthException catch (e) { // 针对性捕获Firebase认证错误,可根据错误码给出更友好提示 print('认证失败:${e.message}'); } catch (e) { // 捕获其他类型异常 print(e.toString()); } },
额外提醒:
- 实际场景中不能硬填空字符串,必须让用户输入当前账号的邮箱和密码,否则必然触发认证失败。
- 建议单独捕获
FirebaseAuthException,可以根据错误码(如wrong-password、invalid-email)给用户展示更精准的错误提示,而不只是打印日志。
内容的提问来源于stack exchange,提问作者Ruder Buster
相关产品推荐
相关产品推荐

