2015-05-22 8 views
1

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

Но я не понимаю, как обратный вызов auth-Method прослушивает «Session expired», поскольку его получение выполняется только один раз (когда пользователь входит в систему). Или есть ли на самом деле прослушиватель событий на своих обратных вызовах? `

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

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

+3

Вы ищете '$ onAuth'. См. Https://www.firebase.com/docs/web/libraries/angular/guide/user-auth.html#section-auth-state –

+0

Я не могу выдвинуть ваш комментарий, Puf! – Kato

+0

Спасибо, ребята, мне нужно научиться более внимательно смотреть в руководстве! – Fortuna

ответ

0

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

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

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