Flutter Firebase Authentication中currentUser()返回null致邮件验证失败求助
Flutter Firebase Auth 创建用户后发送验证邮件遇 currentUser 返回 null 问题解决
我之前也踩过这个一模一样的坑!Firebase Auth 在刚完成用户创建/登录操作后,currentUser() 经常会因为本地状态同步延迟返回 null,进而导致调用 sendEmailVerification() 时触发空引用错误,而且 Android 和 iOS 平台都会出现这个情况。下面给你两个靠谱的解决思路:
方法一:直接复用创建用户返回的 FirebaseUser 对象
其实调用 createUserWithEmailAndPassword 成功后,返回的 FirebaseUser 已经处于登录状态了,你完全不需要额外调用 signInWithEmailAndPassword,直接用这个实例发送验证邮件就可以:
FirebaseUser user = await _auth.createUserWithEmailAndPassword( email: email, password: password ); // 直接用创建成功返回的user对象调用验证方法 await user.sendEmailVerification();
方法二:监听 Auth 状态流确保用户状态同步
如果你确实需要依赖 currentUser(),可以通过监听 Auth 状态的流来等待用户状态完成同步,直到获取到非 null 的用户实例:
// 先完成用户创建 await _auth.createUserWithEmailAndPassword(email: email, password: password); // 监听状态变化,直到拿到已登录的用户 FirebaseUser user = await _auth.onAuthStateChanged.firstWhere((user) => user != null); await user.sendEmailVerification();
问题根源
Firebase Auth 的 currentUser() 是一个同步获取当前用户的方法,但在刚完成创建/登录操作时,本地的 Auth 状态可能还没来得及和云端同步,所以会暂时返回 null。而 createUserWithEmailAndPassword 返回的是创建成功后的用户实例,这个实例是实时且可靠的,直接用它调用验证邮件方法就不会有问题。
内容的提问来源于stack exchange,提问作者Boris R.
相关产品推荐
相关产品推荐

