首页 > 解决方案 > Firebase 用户 == 一直为空

问题描述

我的应用使用firebase,它需要在注册后向用户发送验证电子邮件,然后他们才能登录。在我的代码中,应用程序无法发送验证电子邮件,我在代码的第 86/88 行发现用户始终为空(在调试时)。任何帮助将不胜感激。

我试着往回走,但我无法找到我割伤动脉的地方


import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
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.OnFailureListener;
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 static android.text.TextUtils.isEmpty;

public class LoginActivity extends AppCompatActivity {

    private FirebaseAuth.AuthStateListener mAuthListener;

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

        firebaseAuthSetUp();

        //widgets
        TextView mSignUp = (TextView) findViewById(R.id.sign_up_txt);
        TextView forgotPassword = (TextView) findViewById(R.id.forgot_password_txt);
        Button mSignIn = (Button) findViewById(R.id.sign_in_btn);
        final EditText mEmailSignIn = (EditText) findViewById(R.id.sign_in_email);
        final EditText mPasswordSignIn = (EditText) findViewById(R.id.sign_in_password);

        mSignUp.setOnClickListener((new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(LoginActivity.this, SignUpActivity.class);
                startActivity(intent);
            }
        }));

        //sign in process
        mSignIn.setOnClickListener((new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!isEmpty(mEmailSignIn.getText().toString()) && !isEmpty(mPasswordSignIn.getText().toString())) {
                    //showProgressBar();
                    FirebaseAuth.getInstance().signInWithEmailAndPassword(mEmailSignIn.getText().toString(), mPasswordSignIn.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            //hideProgressBar();
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(LoginActivity.this, " Authentication Failed!!!", Toast.LENGTH_LONG).show();
                            //hideProgressBar();
                        }
                    });
                } else {
                    Toast.makeText(LoginActivity.this, "Please, Fill All Fields", Toast.LENGTH_LONG).show();
                }
            }
        }));

    }

    //Setting up Firebase
    private void firebaseAuthSetUp() {
        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                Log.d("TAG", "CurrentUser: " + user);
                if (user != null) {
                    if(user.isEmailVerified()){
                        Log.d("TAG", "onAuthStateChanged: signed in: " + user.getEmail());
                        Toast.makeText(LoginActivity.this, "signed in " + user.getUid(), Toast.LENGTH_LONG).show();
                    } else{
                        Toast.makeText(LoginActivity.this, "Please Check Your Email Inbox for Verification Link " + user.getUid(), Toast.LENGTH_LONG).show();
                        FirebaseAuth.getInstance().signOut();
                    }
                } else {
                    Toast.makeText(LoginActivity.this, "failed to sign in", Toast.LENGTH_LONG).show();
                }
            }
        };
    }

    @Override
    protected void onStart() {
        super.onStart();
        FirebaseAuth.getInstance().addAuthStateListener(mAuthListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (mAuthListener != null) {
            FirebaseAuth.getInstance().addAuthStateListener(mAuthListener);
        }
    }

    /*public void showProgressBar(){
        mProgressBar.setVisibility(View.VISIBLE);
    }

    public void hideProgressBar(){
        if (mProgressBar.getVisibility() == View.VISIBLE){
            mProgressBar.setVisibility(View.INVISIBLE);
        }
    }*/

}```

标签: javaandroidfirebasefirebase-authentication

解决方案


非常感谢@Praveen 和@Alex ...想通了,我在 [方法中的if(user.isEmailVerified())firebaseAuthSetup()] 的 else 语句中签出用户是错误的。如果我没有从onComplete()


推荐阅读