Firebase/Flutter: reload() not refreshing user.isEmailVerifi



当用户在应用程序中注册时,我正在发送验证链接,但是当我尝试创建一个流来侦听用户何时单击电子邮件中的验证链接时。

我知道我需要以某种方式刷新用户令牌,但我似乎无法让它工作。我以为reload()方法就是这种方法,但也许我只是没有正确实现它。

问题是流总是返回 isEmailVerified == false,使其为真的唯一方法是让用户注销并再次登录,这是我想避免的。我该怎么做?

我创造了这个未来:

//CHECKS IF EMAIL IS VERIFIED
Future<bool> checkIfEmailIsVerified() async {
FirebaseUser currUser = await _auth.currentUser();
await currUser.reload();
currUser = await _auth.currentUser();
final bool flag = currUser.isEmailVerified;
if (currUser != null) {
return flag;
} else {
return false;
}
}

而这个流:

//IS EMAILVERIFIED STREAM
Stream<EmailVerified> get emailVerified async* {
final bool isEmailVerified = await checkIfEmailIsVerified();
yield EmailVerified(isEmailVerified);
}

不幸的是,有必要在重新加载后获取用户的新实例:

User user = FirebaseAuth.instance.currentUser;
if (user != null) {
await user.reload();
user = FirebaseAuth.instance.currentUser;
if (user.emailVerified) {
...
}
}

尝试在链式期货上使用单个等待

FirebaseUser currUser = await _auth.currentUser().then((u) => u.reload().then((_) => _auth.currentUser()));
final bool flag = currUser.isEmailVerified;

最新更新