From 95bae8289d3a391065e66673cd969c63b7101ef2 Mon Sep 17 00:00:00 2001
From: Louis Lam <louislam@users.noreply.github.com>
Date: Tue, 9 Nov 2021 22:37:05 +0800
Subject: [PATCH] Fix setting page when disabled auth

---
 src/mixins/socket.js   | 10 ++++++++++
 src/pages/Settings.vue | 11 +++++++----
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/mixins/socket.js b/src/mixins/socket.js
index 170a07a7..affac4f8 100644
--- a/src/mixins/socket.js
+++ b/src/mixins/socket.js
@@ -1,5 +1,6 @@
 import { io } from "socket.io-client";
 import { useToast } from "vue-toastification";
+import jwt_decode from "jwt-decode";
 const toast = useToast();
 
 let socket;
@@ -217,6 +218,15 @@ export default {
             return (this.remember) ? localStorage : sessionStorage;
         },
 
+        getJWTPayload() {
+            const jwtToken = this.$root.storage().token;
+
+            if (jwtToken && jwtToken !== "autoLogin") {
+                return jwt_decode(jwtToken);
+            }
+            return undefined;
+        },
+
         getSocket() {
             return socket;
         },
diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue
index 9312b0c2..9d501407 100644
--- a/src/pages/Settings.vue
+++ b/src/pages/Settings.vue
@@ -306,7 +306,7 @@
                     <p>这是为 <strong>有第三方认证</strong> 的用户提供的功能,如 Cloudflare Access</p>
                     <p>请谨慎使用!</p>
                 </template>
-                
+
                 <template v-else-if="$i18n.locale === 'zh-TW' ">
                     <p>你是否要<strong>取消登入驗證</strong>?</p>
                     <p>此功能是設計給已有<strong>第三方認證</strong>的使用者,例如 Cloudflare Access。</p>
@@ -515,9 +515,11 @@ export default {
         },
 
         loadUsername() {
-            const jwtToken = this.$root.storage().token;
-            const jwtPayload = jwt_decode(jwtToken);
-            this.username = jwtPayload.username;
+            const jwtPayload = this.$root.getJWTPayload();
+
+            if (jwtPayload) {
+                this.username = jwtPayload.username;
+            }
         },
 
         loadSettings() {
@@ -568,6 +570,7 @@ export default {
             this.settings.disableAuth = false;
             this.saveSettings();
             this.$root.storage().removeItem("token");
+            location.reload();
         },
 
         downloadBackup() {