在电子邮件中验证邮件时不会调用onAuthStateChanged

时间:2019-02-08 11:11:19

标签: firebase flutter firebase-authentication

当用户注册我的应用程序时,他会收到一封验证电子邮件。在使用onAuthStateChanged创建用户时会调用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的{​​{1}}方法中设置了initState

StatefulWidget

4 个答案:

答案 0 :(得分:1)

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

根据Doc-

onAuthStatechanged添加用于更改用户登录状态的观察者。

观察者将在以下情况下触发:

  •   

    首次调用auth()。onAuthStateChanged()时。它将触发   初始Auth状态。如果用户是从   auth()。signInWithRedirect()操作,观察者将等待   在最初触发之前解决的操作。

  •   

    新用户签名时。

  •   

    已经登录的用户退出时。

答案 1 :(得分:0)

目前,我正在提供一个“完成电子邮件验证”按钮。这将调用User.reload-因此,按照上面@Frank van Puffelen的注释,这似乎足够了。这比获得状态更新事件要令人满意的多。我可能会实现一个循环,以在发送电子邮件后的一段时间内检查状态,以便该应用自动通过。

答案 2 :(得分:0)

使用where函数:

final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

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

答案 3 :(得分:0)

发送电子邮件验证链接后,您只需执行firebase.auth()。signOut。当用户再次单击登录时,它将自动触发onAuthStateChanged。