Firebase 9.0.0- Как узнать, вошел ли пользователь в систему с помощью AuthStateListener

С Google Firebase AuthStateListener я не уверен, как определить, истек ли срок действия токена аутентификации. Я использую аутентификацию по электронной почте и паролю, и прослушиватель работает правильно, когда пользователи впервые открывают приложение, и автоматически регистрирует их при последующих запусках приложения.

Проблема возникает, когда срок действия их токена входа истекает, и пользователю необходимо повторно пройти аутентификацию. AuthStateListener просто регистрирует их, но служба Firebase отказывает им в доступе, поскольку срок действия их токена истек.

Мой код слушателя:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_selector);

    mRef = FirebaseDatabase.getInstance().getReference();
    auth = FirebaseAuth.getInstance();
    firebaseAuth = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            if (firebaseAuth.getCurrentUser()!= null){
                Toast.makeText(getApplicationContext(), "Logged in", Toast.LENGTH_SHORT).show();

                changeToNextFragment();
            } else {
                Toast.makeText(getApplicationContext(), "You are not currently logged in.", Toast.LENGTH_SHORT).show();
                changeToLogin();
            }
        }
        };

И слушатель вызывается здесь:

@Override
protected void onStart() {
    super.onStart();
    auth.addAuthStateListener(firebaseAuth);
}

Каков соответствующий тест объекта FirebaseAuth, чтобы узнать, истек ли срок действия токена?


person Jacob Riedel    schedule 21.05.2016    source источник
comment
В SDK 3.x токен авторизации должен автоматически обновляться каждый час без необходимости кода с вашей стороны. Вы говорите, что ваши пользователи получают ошибки из-за истечения срока действия их токена? Если да, можете ли вы опубликовать трассировку ошибки/стека?   -  person Frank van Puffelen    schedule 22.05.2016
comment
@FrankvanPuffelen, у меня похожий сценарий. У меня включено сохранение, и пользователь автоматически входит в систему через пару часов бездействия (отключение эмулятора, поэтому нет автоматического обновления токена). После входа в систему пользователь может взаимодействовать с локальной базой данных (setValues ​​и changeEventListeners). Но события локальных изменений никогда не отображаются на консоли (и наоборот). Я получаю это сообщение в журнале: PersistentConnection: pc_0 - Ошибка аутентификации: expired_token (срок действия токена аутентификации истек). Все приходит в норму после принудительного выхода и входа.   -  person rmarau    schedule 23.05.2016
comment
Я должен упомянуть, что приложение вело себя так, как ожидалось, до процесса миграции. И что я установил на старой консоли время сеанса 10 лет.   -  person rmarau    schedule 23.05.2016