2013-09-18 2 views
5

Я использую angularFireAuth, а angularFireAuth предоставляет зарегистрированные пользовательские переменные. Скажем, $scope.user.id, и я использую это, чтобы проверить, зарегистрирован ли текущий пользователь. А также я использую angularFireAuth.logout() для выхода из системы.Firebase multiple browser tab authenticate

Все работает нормально на одной открытой вкладке браузера.

Но он не работает на нескольких вкладках.

  • Войти 1 логин Вкладки WILL NOT другие вкладки и установите вошедшие в variables
  • Выходе 1 вкладки DOES NOT ясно, остальные вкладки variables и выхода из системы.

Так значит

Я открыл 2 вкладки, я называю это вкладки и Вкладки B. Когда я выхожу из системы или зарегистрируйтесь в tab A.

Вкладка B также не будет. В одноименное время, если я отправлю что-то требуемое, прошедшее проверку подлинности в вкладке b (вкладка A уже вышла из системы). Я все еще могу подчиниться. (если я не обновляю вручную).

+0

Вы вызываете angularFireAuth.logout(), чтобы реализовать выход из системы? – Anant

+0

@ Да, конечно. когда я вхожу в систему и выхожу из системы. Аутентифицированные «var» и сеанс работают только на одной вкладке. – vzhen

+0

@Anant Я обновил свой вопрос до более ясного – vzhen

ответ

0

Если вы обновите браузер при возврате на вторую вкладку, необходимо обновить аутентификацию, хранящуюся в локальном хранилище.

Вы также можете использовать локальное хранилище для обмена событиями с другими вкладками и окнами в том же домене. В случае с firebase пользователь должен автоматически обновляться в локальном хранилище и запускать событие.

Слушайте событие изменения хранилища, затем используйте firebase getAuth или API, который вызывает getAuth в angularFireAuth.

Может выглядеть следующим образом:

function onStorageEvent(storageEvent){ 
    var authData = ref.getAuth(); 
    if (authData !== null) { 
     // you're logged in 
    } 
} 

Чтобы обезопасить протокол обмена сообщениями, который позволяет указать действие или событие, которое должно быть обработано можно implimented использовать локальное хранилище (Вы получите в памяти каждый раз, когда событие изменения состояния, убедитесь, что поле для хранения в хранилище можно обновить и выполнить только действия на других вкладках на основе событий, которые обновляют этот массив сообщений, здесь также должно быть задействовано больше безопасности).

Обмен сообщениями с общим хранилищем данных должен выполняться только в том случае, если пользователь был ранее выведен из системы, и предполагается, что все открытые вкладки браузера должны войти в состояние входа, когда логин будет завершен на другой вкладке. После входа в систему все события Firebase через websocket, полученные в TabA, также должны быть получены TabB, поэтому intertab-связь не потребуется.

+0

Похоже, вы потеряли несколько логинов, как видно из этого предложения по редактированию http://stackoverflow.com/review/spected-edits/15183563. Если вы хотите попросить слияния, пожалуйста, используйте страницу [свяжитесь с нами] (http://stackoverflow.com/contact) и попросите слияние с аккаунтом. –