Firebase: как проверить, зарегистрирован ли пользователь?

Новая пчела для Android Firebase; Я испытываю проверку подлинности Firebase и пытаюсь проверить, вошел ли пользователь, чтобы сделать это, я использую этот простой код:

null != mAuth.getCurrentUser();

И это возвращает true, хотя я не вошел в систему, но я включил анонимный вход, и я подумал, что это может быть проблемой, но когда я проверяю mAuth.getCurrentUser().isAnonymous() Я получаю false.

Проверка mAuth.getCurrentUser() в IDE показывает следующее: enter image description here

Любые направления здесь.

Ответ 1

У меня была аналогичная проблема, и из-за того, что выйти из Firebase недостаточно - она ​​автоматически будет автоматически входить.

Необходимо также выйти с помощью GoogleSignInApi:

firebaseAuth.signOut();
Auth.GoogleSignInApi.signOut(apiClient);

Ответ 2

Я думаю, что он работает как:

FirebaseAuth.getInstance().getCurrentUser()

Он должен возвращать null, если пользователь не вошел в систему.

Ответ 3

Чтобы проверить, вошел ли пользователь в систему:

 private FirebaseAuth firebaseAuth;
 FirebaseAuth.AuthStateListener mAuthListener;

Тогда в вашем onCreate:

     firebaseAuth = FirebaseAuth.getInstance();

      mAuthListener = new FirebaseAuth.AuthStateListener(){
                @Override
                public  void  onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        if(user!=null){
        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
}
                }


            };

Это может быть создано в классе состояния авторизации или в интерфейсе. Затем вы можете просто вызвать состояние аутентификации или включить любую активность, с которой вы хотите это сделать:

Проверка состояния авторизации при выполнении действия:

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


    @Override
    protected void onResume() {
        super.onResume();
        firebaseAuth.addAuthStateListener(mAuthListener);
        }




    @Override
    protected void onStop() {
        super.onStop();
        firebaseAuth.removeAuthStateListener(mAuthListener);
    }

Теперь о вашем логине: после установки ваших логических значений для проверки пользователь вошел в состояние: (по умолчанию логическое значение установлено в false)

firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            progressBar.setVisibility(View.GONE);
                            if (!task.isSuccessful()) {
//set a your boolean to false
current_user_db.setValue(false);

и, если пользователь успешно вошел в систему, установите для него значение true, а затем намерение:

else {


String userid = firebaseAuth.getCurrentUser().getUid();
                            DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference("Users").child(userid);
                            current_user_db.setValue(true);
                            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                            startActivity(intent);
                            finish();

                        }

После этого для вашего узла будет установлено значение False, если пользователь вошел в систему, или значение false, если пользователь не вошел в систему.

Ответ 4

Котлин версия

если вы используете Kotlin Просто сделайте это:

//properties
var firebaseAuth: FirebaseAuth? = null
var mAuthListener: FirebaseAuth.AuthStateListener? = null    
//in onCreate function
firebaseAuth = FirebaseAuth.getInstance()
    mAuthListener = FirebaseAuth.AuthStateListener() {
        fun onAuthStateChanged(@NonNull firebaseAuth:FirebaseAuth) {
            val user = FirebaseAuth.getInstance().getCurrentUser()
            if (user != null)
            {
                val intent = Intent([email protected], MainActivity::class.java)
                startActivity(intent)
                finish()
            }
        }
    }