diff options
author | Corey Hulen <corey@hulen.com> | 2017-01-06 08:54:02 -0500 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2017-01-06 08:54:02 -0500 |
commit | c81efa0b4e11fc1d86c6b16efd8670cf29756d81 (patch) | |
tree | 9354843434967f0fccdae99697dd112544a65b27 /webapp/components/root.jsx | |
parent | 858ce02fc83832d7b5b994320115f62d50784fdc (diff) | |
download | chat-c81efa0b4e11fc1d86c6b16efd8670cf29756d81.tar.gz chat-c81efa0b4e11fc1d86c6b16efd8670cf29756d81.tar.bz2 chat-c81efa0b4e11fc1d86c6b16efd8670cf29756d81.zip |
PLT-4758 fixing signaling of logout (#4984)
Diffstat (limited to 'webapp/components/root.jsx')
-rw-r--r-- | webapp/components/root.jsx | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/webapp/components/root.jsx b/webapp/components/root.jsx index be50c7d48..465df5d79 100644 --- a/webapp/components/root.jsx +++ b/webapp/components/root.jsx @@ -8,11 +8,12 @@ import Client from 'client/web_client.jsx'; import {IntlProvider} from 'react-intl'; import React from 'react'; - import FastClick from 'fastclick'; +import $ from 'jquery'; import {browserHistory} from 'react-router/es6'; import UserStore from 'stores/user_store.jsx'; +import BrowserStore from 'stores/browser_store.jsx'; export default class Root extends React.Component { constructor(props) { @@ -35,6 +36,30 @@ export default class Root extends React.Component { } /*eslint-enable */ + // Force logout of all tabs if one tab is logged out + $(window).bind('storage', (e) => { + // when one tab on a browser logs out, it sets __logout__ in localStorage to trigger other tabs to log out + if (e.originalEvent.key === '__logout__' && e.originalEvent.storageArea === localStorage && e.originalEvent.newValue) { + // make sure it isn't this tab that is sending the logout signal (only necessary for IE11) + if (BrowserStore.isSignallingLogout(e.originalEvent.newValue)) { + return; + } + + console.log('detected logout from a different tab'); //eslint-disable-line no-console + GlobalActions.emitUserLoggedOutEvent('/', false); + } + + if (e.originalEvent.key === '__login__' && e.originalEvent.storageArea === localStorage && e.originalEvent.newValue) { + // make sure it isn't this tab that is sending the logout signal (only necessary for IE11) + if (BrowserStore.isSignallingLogin(e.originalEvent.newValue)) { + return; + } + + console.log('detected login from a different tab'); //eslint-disable-line no-console + location.reload(); + } + }); + // Fastclick FastClick.attach(document.body); } |