【问题标题】:On every call of isEmailVerified() returning the false condition, Even after email verified在每次调用 isEmailVerified() 时返回错误条件,即使在电子邮件验证之后
【发布时间】:2020-06-29 06:24:22
【问题描述】:

实际上我在这里做什么,当用户登录他们的帐户时,然后我检查他们是否验证了他们的电子邮件地址,如果没有,那么我将启动EmailVerificationActivity。 当用户点击发送验证电子邮件按钮时,电子邮件验证码将被发送到用户的电子邮件地址。

之后,当用户成功验证他们的电子邮件地址时,当他们再次点击SEND VERIFICATION LINK按钮时。

而不是显示 toast 消息 Toast.makeText(this, "Your email has been verified, Now you can login.", Toast.LENGTH_LONG).show();, 再次发送电子邮件验证链接。

为什么isEmailVerified() 返回false 条件。

这是我的EmailVerificationActivity

package com.socialcodia.sherewatan;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class EmailVerificationActivity extends AppCompatActivity {

    private TextView tvEmailAddress;
    private Button btnSendVerificationEmail, btnSignOut;

    //Firebase
    FirebaseAuth mAuth;
    FirebaseUser mUser;

    String email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_email_verification);

        //Init
        tvEmailAddress = findViewById(R.id.tvEmailAddress);
        btnSendVerificationEmail = findViewById(R.id.btnSendVerificationEmail);
        btnSignOut = findViewById(R.id.btnSignOut);

        //Firebase Init
        mAuth = FirebaseAuth.getInstance();
        mUser = mAuth.getCurrentUser();

        // get and set email address
        email = mUser.getEmail();
        tvEmailAddress.setText(email);

        btnSignOut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signOut();
            }
        });

        btnSendVerificationEmail.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isEmailVerified();
            }
        });
    }

    private void isEmailVerified()
    {
        if (mAuth.getCurrentUser()!=null)
        {
            boolean isEmailVerified = mAuth.getCurrentUser().isEmailVerified();
            if (isEmailVerified)
            {
                Toast.makeText(this, "Your email has been verified, Now you can login.", Toast.LENGTH_LONG).show();
            }
            else
            {
                sendVerificationEmail();
            }
        }
    }

    private void sendVerificationEmail()
    {
        mAuth.getCurrentUser().sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful())
                {
                    Toast.makeText(EmailVerificationActivity.this, "Email verification link has been sent", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Toast.makeText(EmailVerificationActivity.this, "Oops! Failed to send email verification link", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private void sendToLoginWithEmail()
    {
        Intent intent= new Intent(getApplicationContext(),LoginActivity.class);
        intent.putExtra("email",email);
        startActivity(intent);
        finish();
    }

    private void signOut()
    {
        mAuth.signOut();
        sendToLoginWithEmail();
    }
}

【问题讨论】:

    标签: java android firebase firebase-authentication


    【解决方案1】:

    您需要重新加载当前用户信息。您看到您通过身份验证获得的用户数据是旧的,您需要检索最新的。为此使用reload() 方法。

    【讨论】:

    • 但我从昨天开始就在使用这种方法。 +1
    【解决方案2】:

    我是如何解决这个错误的。

    private void isEmailVerified()
    {
        mAuth.getCurrentUser().reload().addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                if (mAuth.getCurrentUser()!=null)
                {
                    boolean isEmailVerified = mAuth.getCurrentUser().isEmailVerified();
                    if (isEmailVerified)
                    {
                        Toast.makeText(getApplicationContext(), "Your email has been verified, Now you can login.", Toast.LENGTH_LONG).show();
                    }
                    else
                    {
                        sendVerificationEmail();
                    }
                }
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-31
      • 2020-03-28
      • 1970-01-01
      • 2021-06-02
      • 2022-01-09
      • 1970-01-01
      • 2022-08-05
      • 2019-07-02
      • 1970-01-01
      相关资源
      最近更新 更多