Firebase 3 — эквивалент ref.getAuth()

В Firebase 2 я смог выполнить синхронную проверку, чтобы узнать, вошел ли пользователь в систему, например:

if (!ref.getAuth()) ..go to login page
else ..show page

Я могу получить доступ к состоянию currentUser с помощью firebase.auth().currentUser, поэтому я попытался сделать:

if (!firebase.auth().currentUser) ..go to login page
else ..show page

Проблема в том, что это всегда изначально нулевое значение, поэтому оно перенаправляет на страницу входа в систему, а через несколько мгновений происходит onAuthStateChanged, и пользователь входит в систему.

Есть ли еще способ синхронно проверить это? Или есть обещание, к которому я могу прислушаться, чтобы показать загрузчик или что-то в этом роде? Спасибо.


person Dominic    schedule 21.05.2016    source источник


Ответы (2)


Я использовал прослушиватель состояния аутентификации, чтобы определить, вошел ли пользователь в систему.

  auth.onAuthStateChanged(function(user) {
    console.log('authStateChanged', user);
    if (user) {
      console.log("Welcome UID:" + user.uid);
    }
  });

Когда вы сразу прикрепите этот прослушиватель, он сработает с правильным состоянием.

Когда я запускаю приложение, вхожу в систему и перезагружаю страницу, журнал выводит:

authStateChanged Fl {...}

Добро пожаловать UID: 052289713245805425655890E9024AB4ADBA5404B3C0

Таким образом, вы можете использовать первый вызов слушателя, чтобы определить, вошел ли пользователь уже в систему.

person Frank van Puffelen    schedule 21.05.2016
comment
Спасибо, но для меня есть небольшая задержка в 2 секунды или около того, я думаю, мне придется показать счетчик загрузки, а затем перенаправить или показать страницу, когда произойдет onAuthStateChanged. - person Dominic; 22.05.2016
comment
С приведенным выше кодом поток правильный. Если задержка заметна пользователю, вы можете легко добавить индикатор загрузки, показывая его при загрузке представления и скрывая при срабатывании onAuthStateChanged(). - person Frank van Puffelen; 22.05.2016
comment
Это то, что я сделал - приятно знать, что я ничего не упустил, и это ожидаемый способ - person Dominic; 22.05.2016
comment
@DominicTobias Я использую firebase с приложением react + redux, и я использую firebase.auth().currentUser для успешного входа в систему пользователя, сохранения его в локальном состоянии и перенаправления пользователя на авторизованную страницу с помощью react-router. Я также прикрепил onAuthStateChanged к функции componentWillMount в моем основном контейнере приложения. Это позволяет мне получить информацию о пользователе авторизации при перезагрузке (я подтвердил, используя расширение redux chrome). Тем не менее, перенаправление реактивного маршрутизатора никогда не происходит. любые мысли или предложения. Если у вас есть пример кода, это было бы здорово. - person jasan; 16.06.2016

У меня была та же проблема, и поскольку я использую Angular, я обнаружил синхронный вызов $getAuth() в AngularFire. https://github.com/firebase/angularfire/blob/master/docs/reference.md#getauth

Возможно, в библиотеке ReactFire также есть эквивалент. :)

person Qi CHEN    schedule 15.06.2016