【问题标题】:Re-Send Firebase email verification重新发送 Firebase 电子邮件验证
【发布时间】:2017-09-09 04:20:20
【问题描述】:

我有一个看起来很愚蠢的问题,但我在任何地方都找不到答案。 我有一个简单的 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 文档,但没有找到解决方案。 有没有人遇到过同样的“问题”?

感谢您的帮助

【问题讨论】:

  • 当您收到提示用户存在的错误时,您可以使用用户输入凭据重新验证用户,然后让当前用户重新发送验证。
  • 您无法重新验证用户,因为它已经存在。这意味着 FIRAuth.auth().currentUser 为 nil
  • @Alex 你找到解决这个问题的办法了吗

标签: ios firebase swift3 firebase-authentication


【解决方案1】:

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

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,但应该很容易翻译

【讨论】:

    【解决方案2】:

    这个问题已经有一个简短的答案,但我会添加我的答案,因为我遇到了同样的问题。因此,已经使用该电子邮件地址创建了一个用户。稍后用户再次打开应用程序并希望重新发送电子邮件验证,但这次您不使用电子邮件创建用户,因为已经有一个 在 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();
                    }
                }
            }
        });
    

    【讨论】:

      【解决方案3】:

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

      解决方案在firebase documentationGenerate email verification link部分

      【讨论】:

        猜你喜欢
        • 2019-06-24
        • 2018-11-21
        • 1970-01-01
        • 2019-11-25
        • 2018-08-14
        • 2018-01-01
        • 2020-12-12
        • 2020-08-06
        • 2016-02-16
        相关资源
        最近更新 更多