我在尝试注册已经创建的帐户时,向用户发送电子邮件验证链接时遇到问题。我正在使用Flutter并将Firebase作为后端数据库进行编码。
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
abstract class BaseAuth {
Stream<String> get onAuthStateChanged;
Future<String> currentUser();
Future<String> resendVerifyEmail(BaseAuth auth, String email);
}
class Auth implements BaseAuth {...}
Future<String> currentUser() async {
final FirebaseUser user = await _firebaseAuth.currentUser();
print("Getting current user: " + user?.uid);
return user?.uid;
}
Future<FirebaseUser> currentUserModified() async {
final FirebaseUser user = await _firebaseAuth.currentUser();
print("Getting current user: " + user?.uid);
return user;
}
Future<String> resendVerifyEmail(BaseAuth auth, String email) async {
try {
final FirebaseUser user = await _firebaseAuth.currentUser();
FirebaseUser user2 = await currentUserModified();
user.sendEmailVerification();
return user?.uid;
} catch (e) {
print("An Error occurred while sending verification link");
print(e.toString());
return null;
}
}
在try块内部,当调用方法currentUser()时,代码退出并返回到调用resendVerifyEmail的方法,而没有完成try-catch块。
我在让电子邮件验证重新发送到调用resendVerifyEmail的弹出窗口内部时遇到困难。请让我知道使用Flutter从Firebase发送电子邮件验证的其他方法,或与此相关的方法。
似乎您在resendemail功能中添加了不必要的项目。这是我实现自己的方法:
Future<void> sendEmailVerification() async {
final FirebaseUser user = await _firebaseAuth.currentUser();
user.sendEmailVerification();
}
这样注册用户后,只需调用它:
await Auth().sendEmailVerification();
await Auth().signOut();
请确保注销用户,以便他们在关闭并打开您的应用程序时无法自动登录。如果用户通过以下方式验证了他的电子邮件,则还应该在登录中添加支票:
Future<bool> isEmailVerified() async {
final FirebaseUser user = await _firebaseAuth.currentUser();
return user.isEmailVerified == null ? false : user.isEmailVerified;
}
仅在您登录该用户时调用它。