我正在设计一个注册页面,并收集一些用户数据,如电话号码,姓名,姓氏,密码等。我想在用户验证电子邮件后将这些信息添加到Firestore。正在创建用户,但未将信息添加到Firestore中。当我删除if语句if (userCredential.user!.emailVerified == true)
并只使用addUserDetails函数时,它工作得很好。所以我的问题是我如何检查这个状态并将其写入代码中。
try {
final userCredential =
await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: _emailController.text.trim(),
password: _passwordController.text.toString(),
);
await userCredential.user?.updateDisplayName(
"${_firstNameController.text.toString()} ${_lastNameController.text.toString()}");
await userCredential.user?.updateEmail(_emailController.text.trim());
if (userCredential.user!.emailVerified == true) {
addUserDetails(
_firstNameController.text.trim(),
_lastNameController.text.trim(),
_emailController.text.toLowerCase(),
_phoneNumberController.text.trim(),
_passwordController.text.toString(),
FirebaseAuth.instance.currentUser!.uid.toString(),
);
}
}
Future addUserDetails(String firstName, String lastName, String eMail,
String phoneNumber, String password, String userID) async {
await FirebaseFirestore.instance
.collection("users")
.doc(FirebaseAuth.instance.currentUser!.uid)
.set({
"First Name": firstName,
"Last Name": lastName,
"E-mail": eMail,
"Phone Number": phoneNumber,
"Password": password,
"User ID": userID,
});
}
1条答案
按热度按时间g6ll5ycj1#
在执行检查时,
userCredential.user!.emailVerified
听起来永远不是true
。请记住,电子邮件验证发生在带外(它发生在另一个应用程序中,通常是电子邮件客户端或默认的Web浏览器),并且您的客户端应用程序代码在发生时不会收到通知。有关此方面的更多信息,请参阅:
一种可能的解决方法是使用一个循环,该循环周期性地:
另一种选择是总是将信息写入Firestore,包括电子邮件是否经过验证,然后在检查用户的电子邮件地址是否经过验证后重新加载应用程序时更新该信息。