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