Merge pull request #1328 from mattermost/PLT-1016

PLT-1016 force logout on other browsers
Этот коммит содержится в:
Christopher Speller
2015-11-06 10:18:13 -05:00
родитель 51da1b1ca1 17cd95ae05
Коммит 982162ab0d
3 изменённых файлов: 43 добавлений и 14 удалений

Просмотреть файл

@@ -24,11 +24,17 @@ class BrowserStoreClass {
this.setLastServerVersion = this.setLastServerVersion.bind(this);
this.clear = this.clear.bind(this);
this.clearAll = this.clearAll.bind(this);
this.checkedLocalStorageSupported = '';
this.signalLogout = this.signalLogout.bind(this);
var currentVersion = sessionStorage.getItem('storage_version');
if (currentVersion !== global.window.mm_config.Version) {
sessionStorage.clear();
sessionStorage.setItem('storage_version', global.window.mm_config.Version);
try {
sessionStorage.setItem('storage_version', global.window.mm_config.Version);
} catch (e) {
// Do nothing
}
}
}
@@ -105,6 +111,13 @@ class BrowserStoreClass {
sessionStorage.setItem('last_server_version', version);
}
signalLogout() {
if (this.isLocalStorageSupported()) {
localStorage.setItem('__logout__', 'yes');
localStorage.removeItem('__logout__');
}
}
/**
* Preforms the given action on each item that has the given prefix
* Signature for action is action(key, value)
@@ -147,20 +160,26 @@ class BrowserStoreClass {
}
isLocalStorageSupported() {
try {
sessionStorage.setItem('testSession', '1');
sessionStorage.removeItem('testSession');
localStorage.setItem('testLocal', '1');
if (localStorage.getItem('testLocal') !== '1') {
return false;
}
localStorage.removeItem('testLocal', '1');
return true;
} catch (e) {
return false;
if (this.checkedLocalStorageSupported !== '') {
return this.checkedLocalStorageSupported;
}
try {
sessionStorage.setItem('__testSession__', '1');
sessionStorage.removeItem('__testSession__');
localStorage.setItem('__testLocal__', '1');
if (localStorage.getItem('__testLocal__') !== '1') {
this.checkedLocalStorageSupported = false;
}
localStorage.removeItem('__testLocal__', '1');
this.checkedLocalStorageSupported = true;
} catch (e) {
this.checkedLocalStorageSupported = false;
}
return this.checkedLocalStorageSupported;
}
}

Просмотреть файл

@@ -231,6 +231,7 @@ export function resetPassword(data, success, error) {
export function logout() {
track('api', 'api_users_logout');
var currentTeamUrl = TeamStore.getCurrentTeamUrl();
BrowserStore.signalLogout();
BrowserStore.clear();
ErrorStore.storeLastError(null);
window.location.href = currentTeamUrl + '/logout';

Просмотреть файл

@@ -52,6 +52,15 @@
headers: { 'X-MM-TokenIndex': mm_session_token_index }
});
}
$(function () {
$(window).bind('storage', function (e) {
if (e.originalEvent.key === '__logout__') {
console.log('detected logout from a different tab');
window.location.href = '/' + window.mm_team.name;
}
});
});
</script>
<script>