首页 > 解决方案 > Firebase/Flutter:reload() 不刷新 user.isEmailVerified

问题描述

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

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

问题是 Stream 总是返回 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);
  }

标签: firebaseflutterdartfirebase-authentication

解决方案


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

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

推荐阅读