重新发送Firebase电子邮件验证

时间:2017-04-13 07:01:21

标签: ios firebase swift3 firebase-authentication

我有一个看起来很傻但我无法在任何地方找到答案的问题。 我有一个简单的注册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文档。 有没有人曾经遇到同样的问题' ?

感谢您的帮助

3 个答案:

答案 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

部分