我有一个看起来很傻但我无法在任何地方找到答案的问题。 我有一个简单的注册iOS程序,它依赖于Firebase身份验证SDK。
在创建用户后的某个时刻:
FIRAuth.auth()?.createUser(withEmail: userName!, password: password!)
之后,我向用户发送了一封验证邮件:
FIRAuth.auth()?.currentUser?.sendEmailVerification(completion:
{(error) in
if error == nil
{self.showSuccessPopUp()}
else
{self.showErrorPopUp()}
})
一切都很好,没有任何问题。
我的问题是:我的用户收到了电子邮件,并且 - 出于任何原因 - 没有点击自动生成的确认链接。 稍后他再次打开应用程序 - 忘记他已经注册一次 - 尝试使用相同的电子邮件地址注册。
Firebase只是说已经有用该电子邮件地址创建的用户 - 根据文档创建用户即使不活动' - 因此,我想让我的用户选择重新发送验证电子邮件"。
我在没有解决方案的情况下一直在深入研究Firebase API文档。 有没有人曾经遇到同样的问题' ?
感谢您的帮助
答案 0 :(得分:3)
虽然很晚我会在两种情况下回答这个问题:
1:您成功调用了createUser,但是当用户再次打开应用时,firebase.auth()表示他们没有登录
在这种情况下,帐户中存在密码,因此您需要发送“重置密码”电子邮件,而不是身份验证电子邮件
2:您成功调用了createUser,但是当用户再次打开应用时,firebase.auth()表示他们已登录
在这种情况下,他们已登录,但未经过验证。使用
{{1}}
请原谅我使用javascript但应该很容易翻译
答案 1 :(得分:0)
这个问题已经有一个简短的答案,但是由于遇到相同的问题,我将添加答案。因此,已经有一个使用该电子邮件地址创建的用户。稍后,用户再次打开该应用程序,并希望重新发送电子邮件验证,但是这次您不使用电子邮件创建该用户,因为在Firebase中已经创建了一个具有相同电子邮件地址的 用户 ,您可以先通过Firebase进行用户签名,因为Firebase已经具有用户的详细信息,如果成功,则从Firebase获取当前用户。现在,如果您的用户尚未验证,则可以为其选择“重新发送验证电子邮件”。请参阅下面的代码以获得清晰的主意。
以下代码假定 用户已收到电子邮件,并且-由于任何原因-未单击自动生成的确认链接。稍后,他再次打开该应用程序,并且-忘记了他已经注册过一次-尝试使用相同的电子邮件地址进行注册。因此,您希望为用户提供“重新发送验证电子邮件”的选项。
firebaseAuth.signInWithEmailAndPassword(username, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
firebaseUser = firebaseAuth.getCurrentUser();
firebaseUser.reload(); // Here you finally get the user, now you can send verification mail again.
if(firebaseUser.isEmailVerified()) {
// TODO
}else {
// TODO
Toast.makeText(LoginActivity.this, "Please verify your email first!", Toast.LENGTH_LONG).show();
}
}
}
});
现在设置按钮重新发送 这是该代码
resend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(firebaseUser!=null){
firebaseUser.reload();
if(!firebaseUser.isEmailVerified()) {
firebaseUser.sendEmailVerification();
Toast.makeText(LoginActivity.this, "Email Sent!", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(LoginActivity.this, "Your email has been verified! You can login now.", Toast.LENGTH_LONG).show();
}
}
}
});
答案 2 :(得分:-1)
这可以通过将Firebase功能与发送电子邮件的电子邮件(例如Nodemailer或Firebase Trigger Email扩展名)一起使用
解决方案在firebase documentation中 参见Generate email verification link
部分