当用户注册我的应用程序时,他会收到一封验证电子邮件。在使用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
答案 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。