java - 在Firebase上注册帐户后,用户如何在验证电子邮件之前无法登录?

标签 java android firebase firebase-authentication

我的登录帐户有问题。注册帐户后,Firebase 将验证发送到我注册的电子邮件。然后,应用程序通过 toast 通知用户必须检查电子邮件。如果用户不验证电子邮件,他们将无法登录应用程序,但情况正好相反。不验证就可以登录注册邮箱,估计邮箱验证没用

所以,有一些来自 Register Activity.java 类的代码,我在其中嵌入了用于验证的代码,还有用于登录逻辑的 Login Activity.java

LoginActivity.java 类

package id.co.dolansemarang.loginfirebaseds;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

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

public class LoginActivity extends BaseActivity implements View.OnClickListener {
    private static final String TAG = "Login User";
    Button btnLogin;
    EditText edtEmailLogin, edtPasswordLogin;
    TextView tvResetPass;
    FirebaseAuth firebaseAuthLogin;
    DatabaseReference userRefLogin;
    FirebaseUser curUser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        btnLogin = findViewById(R.id.btn_login);
        edtEmailLogin = findViewById(R.id.edt_email_login);
        edtPasswordLogin = findViewById(R.id.edt_password_login);
        tvResetPass = findViewById(R.id.tv_reset_pass);
        firebaseAuthLogin = FirebaseAuth.getInstance();

        btnLogin.setOnClickListener(this);
        tvResetPass.setOnClickListener(this);
    }
//
//    @Override
//    protected void onStart() {
//        super.onStart();
//        // cek apakah pengguna sudah pernah masuk sehingga ada update UI disini
//        FirebaseUser currentUser = firebaseAuthLogin.getCurrentUser();
//        updateUI(currentUser);
//    }

    private void loginUserWithFirebase(String email, String password) {
        Log.d(TAG, "signIn:" + email);
        if (!validateForm()) {
            return;
        }
        showProgressDialog();
        firebaseAuthLogin.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "your account has been success to register");
                    FirebaseUser user = firebaseAuthLogin.getCurrentUser();
                    updateUI(user);

                } else {
                    Log.w(TAG, "please, try again", task.getException());
                    Toast.makeText(LoginActivity.this, "Gagal Login, silakan coba lagi", Toast.LENGTH_LONG).show();
//                    updateUI(null);
                }
                hideProgressDialog();
            }
        });
    }

    private void updateUI(FirebaseUser user) {
        hideProgressDialog();
        if (user != null) {
            startActivity(new Intent(LoginActivity.this, MainActivity.class));
            Toast.makeText(this, "Welcome " + user.getEmail() + "", Toast.LENGTH_LONG).show();
            finish();
        } else {
            startActivity(new Intent(LoginActivity.this, RegisterActivity.class));
            finish();
        }
    }

    private boolean validateForm() {
        boolean valid = true;
        String email = edtEmailLogin.getText().toString();
        String password = edtPasswordLogin.getText().toString();

        if (TextUtils.isEmpty(email)) {
            Toast.makeText(getApplicationContext(), "Harap isi email kembali", Toast.LENGTH_LONG).show();
            valid = false;
        } else {
            if (TextUtils.isEmpty(password)) {
                Toast.makeText(getApplicationContext(), "Harap isi password kembali", Toast.LENGTH_LONG).show();
                valid = false;
            } else {
                if (password.length() <= 6) {
                    Toast.makeText(getApplicationContext(), "password contained minimum 6 character", Toast.LENGTH_LONG).show();
                    valid = false;
                } else {
                    Toast.makeText(getApplicationContext(), "Authentication failed, please try again", Toast.LENGTH_LONG).show();
                    valid = false;
                }
            }
        }
        return valid;
    }

    @Override
    public void onClick(View v) {
        int i = v.getId();
        if (i == R.id.btn_login) {
            loginUserWithFirebase(edtEmailLogin.getText().toString(), edtPasswordLogin.getText().toString());
        } else if (i == R.id.tv_reset_pass) {
            startActivity(new Intent(LoginActivity.this, ResetPasswordActivity.class));
            finish();
        }

    }
}

ResgiterActivity.java类

package id.co.dolansemarang.loginfirebaseds;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

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

import java.util.Random;

public class RegisterActivity extends BaseActivity implements View.OnClickListener{
    private static final String TAG = "EmailPassword";
    EditText edtNama, edtEmail, edtPassword;
    Button btnRegisterOne;
    TextView tvLoginLink;
    FirebaseAuth firebaseAuthReg;

//    //yangakandisimpan
//
//    String NAMA_KEY = "namakey";
//    String nama_key = "";
//    Integer nomor_daftar_user = new Random().nextInt();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        edtNama = findViewById(R.id.edt_nama_register);
        edtEmail = findViewById(R.id.edt_email_register);
        edtPassword = findViewById(R.id.edt_password_register);
        btnRegisterOne = findViewById(R.id.btn_register_one);
        tvLoginLink = findViewById(R.id.tv_login_direct);

        btnRegisterOne.setOnClickListener(this);
        tvLoginLink.setOnClickListener(this);
        firebaseAuthReg = FirebaseAuth.getInstance();
    }

//    @Override
//    protected void onStart() {
//        super.onStart();
//        // cek apakah pengguna sudah pernah masuk sehingga ada update UI disini
//        FirebaseUser currentUser = firebaseAuthReg.getCurrentUser();
//        updateUI(currentUser);
//    }

    private void updateUI(FirebaseUser user) {
        hideProgressDialog();
        if(user != null){
            startActivity(new Intent(RegisterActivity.this, LoginActivity.class));
            finish();
        }
        else{
            Toast.makeText(this,"Welcome to Firebase Authentication",Toast.LENGTH_LONG).show();

        }
    }

    private void registerUser(String Nama, String email, String password) {
        Log.d(TAG, "createAccount:"+email);
        if(!validateForm()){
            return;
        }
        showProgressDialog();
        //start register
        firebaseAuthReg.createUserWithEmailAndPassword(email, password).addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()){
                    Log.d(TAG,"your account has been success to register");
                    sendEmailVerification();
                    FirebaseUser user = firebaseAuthReg.getCurrentUser();
                    updateUI(user);

                }
                else{
                    Log.w (TAG, "please, try again", task.getException());
                    Toast.makeText(RegisterActivity.this,task.getException().getMessage(),Toast.LENGTH_LONG).show();
                    updateUI(null);
                }
                hideProgressDialog();
            }
        });
    }

    private void sendEmailVerification() {
        final FirebaseUser user  = firebaseAuthReg.getCurrentUser();
        user.sendEmailVerification().addOnCompleteListener(this, new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Toast.makeText(RegisterActivity.this,
                            "Verification email sent to " + user.getEmail(),
                            Toast.LENGTH_LONG).show();
                } else {
                    Log.e(TAG, "sendEmailVerification", task.getException());
                    Toast.makeText(RegisterActivity.this,
                            "Failed to send verification email.",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private boolean validateForm() {
        boolean valid = true;
        String nama = edtNama.getText().toString();
        String email = edtEmail.getText().toString();
        String password = edtPassword.getText().toString();

        if(TextUtils.isEmpty(nama)){
            Toast.makeText(getApplicationContext(), "Harap isi nama kembali", Toast.LENGTH_LONG).show();
            valid = false;
        }
        else if( TextUtils.isEmpty(email))
        {
            Toast.makeText(getApplicationContext(), "Harap isi email kembali", Toast.LENGTH_LONG).show();
            valid = false;
        }
        else{
            if(TextUtils.isEmpty(password)){
                Toast.makeText(getApplicationContext(), "Harap isi password kembali", Toast.LENGTH_LONG).show();
                valid = false;
            }
            else{
                if(password.length()<=6){
                    Toast.makeText(getApplicationContext(), "password contained minimum 6 character", Toast.LENGTH_LONG).show();
                    valid = false;
                }

            }
        }
        return valid;
    }

    @Override
    public void onClick(View v) {
        int i = v.getId();
        if(i == R.id.btn_register_one){
            registerUser(edtNama.getText().toString(),edtEmail.getText().toString(),edtPassword.getText().toString());
        }
        else if(i == R.id.tv_login_direct){
            startActivity(new Intent(RegisterActivity.this, LoginActivity.class));
            finish();
        }
    }
}

我希望输出是用户在验证电子邮件之前无法登录,但我在 3 个月内找不到有效的代码:) 谢谢

最佳答案

使用这个:

if(user!=null && user.isEmailVerified()){
    // Add your stuff here
}else{
    // Not Authenticated User Message
}

引用this

关于java - 在Firebase上注册帐户后,用户如何在验证电子邮件之前无法登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55805557/

相关文章:

java - 截击发帖请求问题

javascript - 在 firebase 中使用事务而不是集合是否会产生成本开销?

node.js - Google Cloud Functions、Node JS 8.9.x (LTS) 和 KOA 库

firebase - Firebase 托管的意外尾部斜杠行为

java - 关闭 FTP session 时,在断开连接之前注销 (QUIT) 有什么好处吗?

单例设计模式中的Java静态对象范围不会抛出空指针异常

java - 如何在IE中获取Referer信息

java - 关于关闭 BufferedOutputStream

android内核构建(第一次)

android - angular.io Material 垫滑动切换不适用于 android chrome