FirebaseUser isEmailVerified即使在验证电子邮件后也始终返回false

时间:2020-08-05 02:58:17

标签: firebase flutter firebase-authentication

我有一个静态AuthProvider类,用于集中所有身份验证。

我有以下注册代码。

  AuthResult newUser = await auth.createUserWithEmailAndPassword(
      email: email, password: password);
  if (newUser == null) {
    print(
        'AuthProvider: empty user is returned from createUserWithEmailAndPassword');
    return false;
  }
  await newUser.user.sendEmailVerification();
  return true;

注册该应用后,我收到了一封验证电子邮件,因此我单击了它。 下次尝试登录时,isEmailVerified返回false。经过研究,我认为我应该按如下方式重新加载用户对象:

FirebaseUser user = await auth.currentUser();
await user.reload();
user = await auth.currentUser();

print('${user.isEmailVerified}');

不幸的是,isEmailVerified仍然返回false。 有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:1)

isEmailVerified直到下一次为用户生成ID令牌时才更新。

您可以选择几种方法来完成此操作:

  1. 该ID令牌每55分钟自动刷新一次,因此您可以等待其刷新。
  2. 您可以注销用户,并告诉他们重新登录,这还将生成具有更新的isEmailVerified值的新ID令牌。
  3. 您可以在用户上调用getIdToken(true),这会强制其刷新ID令牌并因此获得更新的isEmailVerified值。

答案 1 :(得分:0)

应用关闭后,firebase会丢失所有存储的信息。

如果要使用自动登录功能,

您使用shared_preferences flutter插件

URL链接:https://pub.dev/packages/shared_preferences

保存电子邮件和密码(必须加密)和

启动应用程序加载数据时

  await _auth
        .signInWithEmailAndPassword(
      email: saveData,
      password: pwData,
    )

和user.isEmailVerified函数返回true