Есть ли обратный вызов, когда сеанс истекает?

Интересно, есть ли обратный вызов, который срабатывает, когда сеанс истекает (я использую Simplelogin с $authWithPassword()). Я уже искал в Google и наткнулся на это: https://groups.google.com/forum/#!topic/firebase-talk/btaE-hCVQdk

Но я не понимаю, как обратный вызов метода аутентификации прослушивает «Сессия истекла», поскольку она выполняется только один раз (когда пользователь входит в систему). Или на самом деле в его обратных вызовах есть прослушиватель событий?

Я попытался проверить вход в систему, используя параметры параметров с expires: ((new Date()).getTime() + 1000) / 1000 (он говорит, что ему нужна метка времени в секундах, а не в миллисекундах), но я не получаю результата.

Любая помощь приветствуется.


person Fortuna    schedule 22.05.2015    source источник
comment
Вы ищете $onAuth. См. firebase.com/docs. /веб/библиотеки/угловой/руководство/   -  person Frank van Puffelen    schedule 22.05.2015
comment
Я не могу проголосовать за твой комментарий, Паф!   -  person Kato    schedule 22.05.2015
comment
Спасибо, ребята, мне нужно научиться внимательнее смотреть в руководство!   -  person Fortuna    schedule 23.05.2015


Ответы (1)


Мое решение для этого:
(в шагах псевдокода, может помочь с полным javascript).
1. Получите timeOffset (сервер/клиент), выполнив:
1.1. при входе в систему ref.set() clientTime (Date.now()) и serverTime (Firebase.ServerValue.TIMESTAMP) в объекте firebase (т.е. в онлайн-списке)
1.2. в случае успеха прочитайте оба и получите timeOffset в мс
2. window.setTimeout() с вашей контролируемой функцией выхода из системы (например, unauth()) и следующим значением тайм-аута:
2,2 микросекунды до тайм-аута: при входе через auth() вы получите authData.expires, используйте это для calc expire-timeout-value:
authData.expires*1000 - Date.now()+that.serverTimeOffset - 2000

используйте *1000, потому что authData.expires приходит за секунды.
пользователь -2000, потому что вы должны быть быстрее с unauth(), чем firebase отключит вас :-)

Я очень доволен этим решением. Он идеально подходит для моей многопользовательской браузерной игры.

person Marcel Ennix    schedule 21.02.2016