diff options
author | =Corey Hulen <corey@hulen.com> | 2015-12-14 15:21:22 -0800 |
---|---|---|
committer | =Corey Hulen <corey@hulen.com> | 2015-12-14 15:21:22 -0800 |
commit | b94d025da44aeebd9651f46cfc4fe367cdd56a87 (patch) | |
tree | c1a140d81eca5d9514a047db540adda0a6b45b11 | |
parent | f5ec973cba4c224de5ba75b56aad447f715b9d6b (diff) | |
download | chat-b94d025da44aeebd9651f46cfc4fe367cdd56a87.tar.gz chat-b94d025da44aeebd9651f46cfc4fe367cdd56a87.tar.bz2 chat-b94d025da44aeebd9651f46cfc4fe367cdd56a87.zip |
PLT-1404 signal login to other tags
-rw-r--r-- | web/react/stores/browser_store.jsx | 17 | ||||
-rw-r--r-- | web/react/utils/client.jsx | 1 | ||||
-rw-r--r-- | web/templates/head.html | 10 |
3 files changed, 28 insertions, 0 deletions
diff --git a/web/react/stores/browser_store.jsx b/web/react/stores/browser_store.jsx index ff6ae45ea..3417faaaf 100644 --- a/web/react/stores/browser_store.jsx +++ b/web/react/stores/browser_store.jsx @@ -29,6 +29,8 @@ class BrowserStoreClass { this.checkedLocalStorageSupported = ''; this.signalLogout = this.signalLogout.bind(this); this.isSignallingLogout = this.isSignallingLogout.bind(this); + this.signalLogin = this.signalLogin.bind(this); + this.isSignallingLogin = this.isSignallingLogin.bind(this); var currentVersion = sessionStorage.getItem('storage_version'); if (currentVersion !== global.window.mm_config.Version) { @@ -129,6 +131,21 @@ class BrowserStoreClass { return logoutId === sessionStorage.getItem('__logout__'); } + signalLogin() { + if (this.isLocalStorageSupported()) { + // PLT-1285 store an identifier in session storage so we can catch if the logout came from this tab on IE11 + const loginId = generateId(); + + sessionStorage.setItem('__login__', loginId); + localStorage.setItem('__login__', loginId); + localStorage.removeItem('__login__'); + } + } + + isSignallingLogin(loginId) { + return loginId === sessionStorage.getItem('__login__'); + } + /** * Preforms the given action on each item that has the given prefix * Signature for action is action(key, value) diff --git a/web/react/utils/client.jsx b/web/react/utils/client.jsx index 5d02a8c88..beabf5227 100644 --- a/web/react/utils/client.jsx +++ b/web/react/utils/client.jsx @@ -246,6 +246,7 @@ export function loginByEmail(name, email, password, success, error) { data: JSON.stringify({name: name, email: email, password: password}), success: function onSuccess(data, textStatus, xhr) { track('api', 'api_users_login_success', data.team_id, 'email', data.email); + BrowserStore.signalLogin(); success(data, textStatus, xhr); }, error: function onError(xhr, status, err) { diff --git a/web/templates/head.html b/web/templates/head.html index be4ed2b25..b39bbc291 100644 --- a/web/templates/head.html +++ b/web/templates/head.html @@ -68,6 +68,16 @@ console.log('detected logout from a different tab'); window.location.href = '/' + window.mm_team.name; } + + 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 (window.BrowserStore.isSignallingLogin(e.originalEvent.newValue)) { + return; + } + + console.log('detected login from a different tab'); + window.location.href = '/'; + } }); }); </script> |