Firebase电子邮件验证无需创建和帐户

时间:2018-01-26 15:17:34

标签: android firebase firebase-authentication

我正在创建一个可以发送通知的Android应用程序。 用户可以选择使用电话号码或电子邮件帐户。

我只需要验证用户输入的电子邮件,我不想创建 Firebase帐户

Firebase有一个FirebaseUser#sendEmailVerification(),但需要创建一个帐户。

换句话说,我只是希望电子邮件验证与电话验证相同,Firebase会向您发送代码或验证链接。

有没有办法在不创建帐户的情况下利用Firebase电子邮件验证?

3 个答案:

答案 0 :(得分:2)

对于任何想要完成同样目标的人来说,我的表现如何。

转到Fibrebase控制台并在身份验证屏幕上启用Email/PasswordAnonymous登录方法

Firebird Authentication screen

然后在您的代码中,创建一个匿名用户(这就是诀窍,因为现在您有一个有效的用户进行验证),更改电子邮件,然后发送验证。之后,重新加载Firebird用户并检查isEmailVerified()

mAuth = FirebaseAuth.getInstance();
mAuth.signInAnonymously()
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                Log.d(TAG, "signInAnonymously:success");
                if (mAuth.getCurrentUser().isEmailVerified() == false) {
                    mAuth.getCurrentUser().updateEmail("<MAIL YOU WANTO TO VERIFY HERE>");
                    mAuth.getCurrentUser().sendEmailVerification();
                    Log.e(TAG, "mail sent.....................................");
                }

                //updateUI(user);
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInAnonymously:failure", task.getException());
                Toast.makeText(getApplicationContext(), "Authentication failed.",
                        Toast.LENGTH_SHORT).show();
            }
        }
    });

这是重装部分:

mAuth.getCurrentUser().reload()
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                Log.e(TAG,( mAuth.getCurrentUser().isEmailVerified() ? "VERIFIED" : "Not verified"));
            }
        });

答案 1 :(得分:0)

电话号码验证和电子邮件验证都与Firebase身份验证帐户绑定。由于验证结果是用户帐户中的相关属性(email_verifiedphone_number)得到更新,因此无法将其与此类帐户一起使用。

答案 2 :(得分:0)

@NickPR: 我还没有找到解决方案。 uper提供的代码无法正常工作。我没有给我发送电子邮件,但是日志包含电子邮件已发送的消息。...... 该代码的含义是:

mAuth.getCurrentUser().reload()
    .addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Log.e(TAG,( mAuth.getCurrentUser().isEmailVerified() ? "VERIFIED" : "Not verified"));
        }
    });