首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重新发送Firebase电子邮件验证

重新发送Firebase电子邮件验证
EN

Stack Overflow用户
提问于 2017-04-13 07:01:21
回答 3查看 9K关注 0票数 5

我有一个看起来很傻的问题,但我哪儿也找不到答案。我有一个简单的注册iOS过程,它依赖于Firebase身份验证SDK。

在创建用户之后的特定时间点上:

代码语言:javascript
运行
复制
FIRAuth.auth()?.createUser(withEmail: userName!, password: password!)

就在那之后,我给我的用户发送了一封验证邮件:

代码语言:javascript
运行
复制
FIRAuth.auth()?.currentUser?.sendEmailVerification(completion:
                        {(error) in
                        if error == nil
                            {self.showSuccessPopUp()} 
                        else
                            {self.showErrorPopUp()}
                    })

一切都很好,一点问题都没有。

我的问题是:我的用户收到了电子邮件,并且--不管什么原因--没有点击自动生成的确认链接。后来,他又打开了这个应用程序--忘了他已经注册过一次--尝试用相同的电子邮件地址注册。

Firebase只是说已经有一个用户用那个电子邮件地址创建了--根据文档,即使不是'active‘-,用户也是被创建的,因此我想给我的用户一个“重新发送验证电子邮件”的选项。

在没有解决方案的情况下,我一直在研究Firebase文档。有没有人有过同样的“问题”?

谢谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-13 15:21:52

虽然很晚,但我会在两种情况下回答这个问题:

1:您成功地调用了createUser,但是当用户再次打开应用程序时,firebase.auth()表示它们没有在中签名

在这种情况下,帐户存在密码,因此您需要发送“重置密码”电子邮件,而不是身份验证电子邮件。

2:您成功地调用了createUser,但是当用户再次打开应用程序时,firebase.auth()表示它们是用签名的

在这种情况下,它们被登录,但没有被验证。使用

代码语言:javascript
运行
复制
firebase.auth().currentUser.reload() // reloads user fields, like emailVerified:
if (!firebase.auth().currentUser.emailVerified) {
    //resend verification email
} else {
     //login
}

请原谅我使用了javascript,但是应该很容易翻译。

票数 8
EN

Stack Overflow用户

发布于 2018-12-07 07:09:39

这个问题已经有一个简短的答案,但我将补充我的答案,因为我正面临着同样的问题。所以已经有了一个用那个电子邮件地址创建的用户。稍后,用户再次打开该应用程序,并希望重新发送电子邮件验证,但这一次您不使用电子邮件创建用户,因为在防火墙中已经创建了一个具有相同电子邮件地址的用户,相反,您可以首先通过防火墙对用户签名,因为防火墙已经有了用户的详细信息,如果成功,那么就从防火墙中获取当前用户。现在,如果用户尚未验证,您可以给他们一个“重新发送验证电子邮件”的选项。请参阅下面的代码以获得清晰的概念。

下面的代码假设用户接收到电子邮件,并且--出于任何原因--没有单击自动生成的确认链接。后来,他又打开了这个应用程序--忘了他已经注册过一次--尝试用相同的电子邮件地址注册。因此,您希望给用户一个“重新发送验证电子邮件”的选项。

代码语言:javascript
运行
复制
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();
                                        }
                                    }
                                }
                            });

现在设置一个按钮,重新发送或者其他什么的,下面是它的代码

代码语言:javascript
运行
复制
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();
                }
            }
        }
    });
票数 1
EN

Stack Overflow用户

发布于 2020-08-30 19:35:35

这可以使用带有电子邮件发送模块的firebase函数(例如Nodemailer或Firebase触发器电子邮件扩展)来完成。

解决方案在[消]火基文件中,请参阅生成电子邮件验证链接部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43385571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档