我有一个看起来很傻的问题,但我哪儿也找不到答案。我有一个简单的注册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只是说已经有一个用户用那个电子邮件地址创建了--根据文档,即使不是'active‘-,用户也是被创建的,因此我想给我的用户一个“重新发送验证电子邮件”的选项。
在没有解决方案的情况下,我一直在研究Firebase文档。有没有人有过同样的“问题”?
谢谢你的帮助
发布于 2018-04-13 15:21:52
虽然很晚,但我会在两种情况下回答这个问题:
1:您成功地调用了createUser,但是当用户再次打开应用程序时,firebase.auth()表示它们没有在中签名
在这种情况下,帐户存在密码,因此您需要发送“重置密码”电子邮件,而不是身份验证电子邮件。
2:您成功地调用了createUser,但是当用户再次打开应用程序时,firebase.auth()表示它们是用签名的
在这种情况下,它们被登录,但没有被验证。使用
firebase.auth().currentUser.reload() // reloads user fields, like emailVerified:
if (!firebase.auth().currentUser.emailVerified) {
//resend verification email
} else {
//login
}请原谅我使用了javascript,但是应该很容易翻译。
发布于 2018-12-07 07:09:39
这个问题已经有一个简短的答案,但我将补充我的答案,因为我正面临着同样的问题。所以已经有了一个用那个电子邮件地址创建的用户。稍后,用户再次打开该应用程序,并希望重新发送电子邮件验证,但这一次您不使用电子邮件创建用户,因为在防火墙中已经创建了一个具有相同电子邮件地址的用户,相反,您可以首先通过防火墙对用户签名,因为防火墙已经有了用户的详细信息,如果成功,那么就从防火墙中获取当前用户。现在,如果用户尚未验证,您可以给他们一个“重新发送验证电子邮件”的选项。请参阅下面的代码以获得清晰的概念。
下面的代码假设用户接收到电子邮件,并且--出于任何原因--没有单击自动生成的确认链接。后来,他又打开了这个应用程序--忘了他已经注册过一次--尝试用相同的电子邮件地址注册。因此,您希望给用户一个“重新发送验证电子邮件”的选项。
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();
}
}
}
});发布于 2020-08-30 19:35:35
这可以使用带有电子邮件发送模块的firebase函数(例如Nodemailer或Firebase触发器电子邮件扩展)来完成。
解决方案在[消]火基文件中,请参阅生成电子邮件验证链接部分。
https://stackoverflow.com/questions/43385571
复制相似问题