Firebase: как проверить, вошел ли пользователь в систему?



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



null != mAuth.getCurrentUser();


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



Проверка mAuth.getCurrentUser() на IDE показывает это: Введите описание изображения здесь



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

752   3  

3 ответов:

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

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

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

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

FirebaseAuth.getInstance().getCurrentUser()

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

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

 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();
}
                }


            };

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

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

 @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, если пользователь не вошел в систему успешно.

Comments

    Ничего не найдено.