Firebase Auth getCurrentUser () возвращает удаленного пользователя - PullRequest
0 голосов
/ 21 сентября 2019

Здравствуйте и спасибо за ваше время.

Я работаю над приложением для Android с использованием Firebase.

Я настроил Аутентификацию Firebase, и пользователь может зарегистрироваться по электронной почте и паролю.и войдите после подтверждения электронной почты.

Когда приложение открывается, я проверяю, вошел ли пользователь в систему с помощью метода onStart(), но я попытался сделать это после удаления пользователя из firebase, и я все еще могу войти!

Должен ли я проверить это по-другому?

@Override
public void onStart() {
    super.onStart();

    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    updateUI(currentUser);
}

******************************************* ОБНОВИТЬ *********************************************

Исправлена ​​проблема с использованием AuthStateListener , но затем я разделил методы signIn и createAccount на 2 отдельных действия.Я также отделил createAccount() от signInWithEmailAndPassword() методов, что заставило меня добавить этот mAuth = FirebaseAuth.getInstance() в оба метода onCreate().В логине я добавил

mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser currentUser = mAuth.getCurrentUser(); ... } };

, но теперь не работает.Я что-то забыл или просто не могу этого сделать?

Вот код, который я нашел релевантным:

Класс LogInActivity onCreate ():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_log_in);

    // Views
    emailEditText = findViewById(R.id.emailEditText);
    passwordEditText = findViewById(R.id.pswdEditText);

    // Buttons
    findViewById(R.id.logInButton).setOnClickListener(this);
    findViewById(R.id.forgottenPaswdTextButton).setOnClickListener(this);
    findViewById(R.id.registerTextButton).setOnClickListener(this);

    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    // Check for user connection
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            // Check if user is signed in (non-null) and update UI accordingly.
            FirebaseUser currentUser = mAuth.getCurrentUser();
            if (currentUser != null) {
                Log.d(TAG, "onAuthStateChanged:signed_in:" + currentUser.getUid());
            } else {
                Log.d(TAG, "onAuthStateChanged:signed_out");
            }
            updateUI(currentUser);
        }
    };
}

Класс SignInActivity onCreate ():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_in);

    // Views
    emailEditText = findViewById(R.id.emailEditText);
    passwordEditText = findViewById(R.id.pswdEditText);
    passwordRetypedEditText = findViewById(R.id.pswdRetypeEditText);
    nameEditText = findViewById(R.id.nameEditText);

    // Buttons
    findViewById(R.id.signUpButton).setOnClickListener(this);
    findViewById(R.id.logInTextButton).setOnClickListener(this);

    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

}

Ответы [ 2 ]

2 голосов
/ 21 сентября 2019

Вы можете прослушивать AuthStateListener для изменений состояния FirebaseUser.

Почему? , в основном, когда вы удаляете пользователя изсервер или другое устройство, оно все равно будет действовать на вашем текущем устройстве, поскольку его токен еще не обновлен локально.

Подробнее о здесь .


Док утверждает, что:

В некоторых случаях getCurrentUser вернет ненулевое FirebaseUser, нобазовый токен недействителен.Это может произойти, , например , если пользователь был удален на другом устройстве и локальный токен не обновился.В этом случае вы можете получить действительного пользователя getCurrentUser, но последующие вызовы для аутентифицированных ресурсов завершатся неудачно.

getCurrentUser также может вернуть null, поскольку объект auth не завершил инициализацию.

Если вы присоедините AuthStateListener, вы получите callback каждый раз, когда изменяется базовое состояние токена.Это может быть полезно для реагирования на крайние случаи, подобные упомянутым выше.

0 голосов
/ 21 сентября 2019

похоже, что firebase сохраняет настройки пользователя локально, попробуйте очистить приложение и войдите снова, проверьте этот документ ПОЛЬЗОВАТЕЛЬ FIREBASE AUTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...