From 268e9ce5042cc89707204153b64f04f1c1b9e0e0 Mon Sep 17 00:00:00 2001
From: taehoon <th.dev91@gmail.com>
Date: Wed, 19 Jun 2019 23:11:39 -0400
Subject: [PATCH 1/4] make sure to clear old token when logout

---
 src/lib/persisted_state.js | 3 ++-
 src/modules/oauth.js       | 4 ++++
 src/modules/users.js       | 2 +-
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/lib/persisted_state.js b/src/lib/persisted_state.js
index 7ab89c12..cad7ea25 100644
--- a/src/lib/persisted_state.js
+++ b/src/lib/persisted_state.js
@@ -19,7 +19,8 @@ const saveImmedeatelyActions = [
   'setHighlight',
   'setOption',
   'setClientData',
-  'setToken'
+  'setToken',
+  'clearToken'
 ]
 
 const defaultStorage = (() => {
diff --git a/src/modules/oauth.js b/src/modules/oauth.js
index 11cb10fe..b7755b64 100644
--- a/src/modules/oauth.js
+++ b/src/modules/oauth.js
@@ -22,6 +22,10 @@ const oauth = {
     },
     setToken (state, token) {
       state.userToken = token
+    },
+    clearToken (state) {
+      state.userToken = false
+      state.token = false
     }
   },
   getters: {
diff --git a/src/modules/users.js b/src/modules/users.js
index 22340271..1e0b16f5 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -399,7 +399,7 @@ const users = {
     logout (store) {
       store.commit('clearCurrentUser')
       store.dispatch('disconnectFromChat')
-      store.commit('setToken', false)
+      store.commit('clearToken')
       store.dispatch('stopFetching', 'friends')
       store.commit('setBackendInteractor', backendInteractorService(store.getters.getToken()))
       store.dispatch('stopFetching', 'notifications')

From c23228f1967547e7df1462efa7b3bcc1a9a96319 Mon Sep 17 00:00:00 2001
From: taehoon <th.dev91@gmail.com>
Date: Wed, 19 Jun 2019 23:12:25 -0400
Subject: [PATCH 2/4] fix error breaking logout flow

---
 src/modules/chat.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/modules/chat.js b/src/modules/chat.js
index 2804e577..4d8d6699 100644
--- a/src/modules/chat.js
+++ b/src/modules/chat.js
@@ -21,7 +21,7 @@ const chat = {
   },
   actions: {
     disconnectFromChat (store) {
-      store.state.socket.disconnect()
+      store.state.socket && store.state.socket.disconnect()
     },
     initializeChat (store, socket) {
       const channel = socket.channel('chat:public')

From 8a32731e4d3772e79b3de35185de3454663be52d Mon Sep 17 00:00:00 2001
From: taehoon <th.dev91@gmail.com>
Date: Wed, 19 Jun 2019 23:20:14 -0400
Subject: [PATCH 3/4] use clientSecret in login flow

---
 src/components/login_form/login_form.js         | 3 ++-
 src/components/oauth_callback/oauth_callback.js | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js
index 93214646..4a5b1965 100644
--- a/src/components/login_form/login_form.js
+++ b/src/components/login_form/login_form.js
@@ -26,9 +26,10 @@ const LoginForm = {
       this.isTokenAuth ? this.submitToken() : this.submitPassword()
     },
     submitToken () {
-      const { clientId } = this.oauth
+      const { clientId, clientSecret } = this.oauth
       const data = {
         clientId,
+        clientSecret,
         instance: this.instance.server,
         commit: this.$store.commit
       }
diff --git a/src/components/oauth_callback/oauth_callback.js b/src/components/oauth_callback/oauth_callback.js
index 2c6ca235..a3c7b7f9 100644
--- a/src/components/oauth_callback/oauth_callback.js
+++ b/src/components/oauth_callback/oauth_callback.js
@@ -4,10 +4,11 @@ const oac = {
   props: ['code'],
   mounted () {
     if (this.code) {
-      const { clientId } = this.$store.state.oauth
+      const { clientId, clientSecret } = this.$store.state.oauth
 
       oauth.getToken({
         clientId,
+        clientSecret,
         instance: this.$store.state.instance.server,
         code: this.code
       }).then((result) => {

From bd377148ade7aaf26652dc14ee77683b7e6c8c5a Mon Sep 17 00:00:00 2001
From: taehoon <th.dev91@gmail.com>
Date: Thu, 20 Jun 2019 11:47:33 -0400
Subject: [PATCH 4/4] delete state.token instead of setting false

---
 src/modules/oauth.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/modules/oauth.js b/src/modules/oauth.js
index b7755b64..a2a83450 100644
--- a/src/modules/oauth.js
+++ b/src/modules/oauth.js
@@ -1,3 +1,5 @@
+import { delete as del } from 'vue'
+
 const oauth = {
   state: {
     clientId: false,
@@ -25,7 +27,9 @@ const oauth = {
     },
     clearToken (state) {
       state.userToken = false
-      state.token = false
+      // state.token is userToken with older name, coming from persistent state
+      // let's clear it as well, since it is being used as a fallback of state.userToken
+      del(state, 'token')
     }
   },
   getters: {