При каждом вызове isEmailVerified (), возвращающем ложное условие, даже после подтверждения электронной почты - PullRequest
0 голосов
/ 18 марта 2020

Что на самом деле я здесь делаю, когда пользователь входит в свою учетную запись, затем я проверяю, что независимо от того, подтвердили ли они свой адрес электронной почты или нет, если нет, тогда я запускаю EmailVerificationActivity. Откуда, когда пользователь нажимает кнопку ОТПРАВИТЬ ВЕРИФИКАЦИЮ , на адрес электронной почты пользователя будет отправлен код подтверждения по электронной почте.

User is sending email verification link

после что когда пользователь успешно подтвердил свой адрес электронной почты, когда он снова нажмет кнопку ОТПРАВИТЬ ВЕРИФИКАЦИЮ .

Вместо отображения всплывающего сообщения Toast.makeText(this, "Your email has been verified, Now you can login.", Toast.LENGTH_LONG).show();, снова отправьте ссылку проверки электронной почты.

sending email verification link again

Почему 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();
    }
}

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Вам необходимо перезагрузить текущую информацию о пользователе. Вы видите, что данные пользователя, которым вы пользуетесь при аутентификации, устарели, и вам нужно получить самую последнюю версию. Для этого используйте метод reload().

0 голосов
/ 18 марта 2020

Как я решил ошибку.

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();
                }
            }
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...