From 1c803f9efe960e4f78a0416145b9168781da32bf Mon Sep 17 00:00:00 2001
From: James Calfee <james@jcalfee.info>
Date: Tue, 29 Nov 2016 11:56:27 -0600
Subject: [PATCH] Logout other tabs (work in progress, I plan to force push a
 bug fix) #667

---
 app/Main.js           |  6 ++++++
 app/redux/UserSaga.js | 21 ++++++++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/app/Main.js b/app/Main.js
index bea08edcb..fdef2b105 100644
--- a/app/Main.js
+++ b/app/Main.js
@@ -7,11 +7,17 @@ import Iso from 'iso';
 import universalRender from 'shared/UniversalRender';
 import ConsoleExports from './utils/ConsoleExports';
 import {serverApiRecordEvent} from 'app/utils/ServerApiClient';
+import {logoutStorageHandler} from 'app/redux/UserSaga'
 
 window.onerror = error => {
     serverApiRecordEvent('client_error', error);
 };
 
+if(process.env.BROWSER) {
+    // You must trigger a storage event from another tab or window..
+    window.addEventListener('storage', logoutStorageHandler, false)
+}
+
 Iso.bootstrap(initial_state => {
     console.log('Initial state', initial_state);
     window.$STM_Config = initial_state.offchain.config;
diff --git a/app/redux/UserSaga.js b/app/redux/UserSaga.js
index a06851fe3..483b44901 100644
--- a/app/redux/UserSaga.js
+++ b/app/redux/UserSaga.js
@@ -300,12 +300,31 @@ function* saveLogin_localStorage() {
 }
 
 function* logout() {
+    console.log('logout...');
     yield put(user.actions.saveLoginConfirm(false)) // Just incase it is still showing
-    if (process.env.BROWSER)
+    if (process.env.BROWSER) {
         localStorage.removeItem('autopost2')
+        localStorage.logout_event = String(Date.now())
+    }
     serverApiLogout();
 }
 
+function* logoutAction() {
+    yield put(user.actions.logout())
+}
+
+export function logoutStorageHandler(storageEvent) {
+    console.log('storageEvent', storageEvent)
+    if(storageEvent.key === 'logout_event') {
+        const iterator = logoutAction()
+        let ret
+        do {
+            ret = iterator.next()
+            console.log('ret', ret)
+        } while(!ret.done)
+    }
+}
+
 function* loginError({payload: {/*error*/}}) {
     serverApiLogout();
 }
-- 
GitLab