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