Firebase: как проверить, вошел ли пользователь в систему?
Новая пчела для Android Firebase ; я пробую аутентификацию Firebase и пытаюсь проверить, вошел ли пользователь в систему, чтобы сделать это, я использую этот простой код:
null != mAuth.getCurrentUser();
И это возвращает true хотя я не вошел в систему, но я включил annonymous login , и я думал, что это может быть проблемой, но когда я проверяю
mAuth.getCurrentUser().isAnonymous() я получаю false.
Проверка mAuth.getCurrentUser() на IDE показывает это: 
Любые направления здесь.
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