【问题标题】:onAuthStateChanged doesn't get called when email is verified in flutter在颤振中验证电子邮件时不会调用 onAuthStateChanged
【发布时间】:2019-07-02 14:57:42
【问题描述】:

当用户在我的应用中注册时,他会收到一封验证电子邮件。 onAuthStateChanged-listener 在使用 createUserWithEmailAndPassword 创建用户时被调用,但在电子邮件得到验证后不会调用。

我有一个单独的类来处理所有身份验证。下面的方法是注册用户

Future<FirebaseUser> signUpUser(email, password) async {
final FirebaseUser user = await _auth.createUserWithEmailAndPassword(email: email, password: password);

assert (user != null);
assert (await user.getIdToken() != null);

return user;
}

在我的 StatefulWidget 中使用这个方法调用这个方法

void _signUpUser() async {
try {
  await Auth().signUpUser(_email, _password)
    ..sendEmailVerification();
} catch (e) {
  print(e.toString());
}
}

onAuthStateChanged是在我的StatefulWidgetinitState方法中设置的

  FirebaseAuth.instance.onAuthStateChanged.listen((user) {
  print("Auth State Changed!");
  if (user.isEmailVerified) {
    print("EMail verified!");
  }
  }

【问题讨论】:

  • 文档中是否有内容说用户将在验证电子邮件后自动登录?此外,也可能是 authStatechanged 只被调用一次,在注册之后,电子邮件仍然未经验证,用户将不得不关闭并打开应用程序。
  • stackoverflow.com/a/58039313/10511266 可能会有所帮助。

标签: firebase flutter firebase-authentication


【解决方案1】:

onAuthStatechanged 仅在用户登录或注销而不是电子邮件验证时触发。

根据Doc -

onAuthStatechanged 为用户登录状态的变化添加一个观察者。

观察者会在以下场景被触发:

  • 首次调用 auth().onAuthStateChanged() 时。它会触发 初始身份验证状态。如果用户从 auth().signInWithRedirect() 操作,观察者将等待 在初始触发之前解决的操作。

  • 当新用户签名时。

  • 当已登录的用户退出时。

【讨论】:

  • 但是当用户验证他的电子邮件时如何获得通知?
  • 您可以强制重新加载 ID 令牌,这将为您获取新值。我不确定User.reload 是否足够,或者您是否需要在此之前致电getIdToken(true)
【解决方案2】:

目前我提供了一个按钮来“完成电子邮件验证”。这调用了 User.reload - 所以这对于@Frank van Puffelen 上面的评论来说似乎已经足够了。这远不如获得状态更新事件令人满意;我可能会在发送电子邮件后执行一个循环来检查一段时间的状态,以便应用程序自动通过。

【讨论】:

    【解决方案3】:

    您可以在发送电子邮件验证链接后简单地执行 firebase.auth().signOut。当用户再次点击登录时,它会自动触发 onAuthStateChanged。

    【讨论】:

      【解决方案4】:

      使用 where 函数:

      final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
      
        Stream<FirebaseUser> get onAuthStateChanged {
          return _firebaseAuth.onAuthStateChanged.where((user)=> user.isEmailVerified);
        }
      

      【讨论】:

        猜你喜欢
        • 2021-05-10
        • 2021-06-07
        • 2019-12-31
        • 2023-03-28
        • 1970-01-01
        • 2019-01-07
        • 2020-10-24
        • 2021-07-12
        • 2019-03-04
        相关资源
        最近更新 更多