From eb322ae208f986ee2d95d822cbdd0041942ace0d Mon Sep 17 00:00:00 2001 From: Zapic <45936772+KawaiiZapic@users.noreply.github.com> Date: Thu, 7 Jul 2022 20:35:58 +0800 Subject: [PATCH] enhance: enhance robustness of global User Store (#122) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 增强user的鲁棒性 * 修复错误使用的非空表达式 Co-authored-by: KawaiiZapic --- src/middleware/Auth.ts | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/src/middleware/Auth.ts b/src/middleware/Auth.ts index 6dbe690..4e1f21f 100644 --- a/src/middleware/Auth.ts +++ b/src/middleware/Auth.ts @@ -1,51 +1,43 @@ +function getValueWithDefault(key, defaultValue) { + try { + return JSON.parse(localStorage.getItem(key) as string) || defaultValue; + } catch (e) { + return defaultValue; + } +} const Auth = { isAuthenticated: false, + _user: getValueWithDefault("user", { anonymous: true, group: {}, tags: [] }), + _preference: getValueWithDefault("preference", {}), authenticate(cb: any) { Auth.SetUser(cb); Auth.isAuthenticated = true; }, GetUser() { - return JSON.parse(localStorage.getItem("user") || "null"); + return Auth._user; }, SetUser(newUser: any) { + Auth._user = newUser; localStorage.setItem("user", JSON.stringify(newUser)); }, Check(): boolean { - if (Auth.isAuthenticated) { - return true; - } - if (localStorage.getItem("user") !== null) { - return !Auth.GetUser().anonymous; - } - return false; + return Auth.isAuthenticated || !Auth.GetUser().anonymous; }, signout() { Auth.isAuthenticated = false; const oldUser = Auth.GetUser(); oldUser.id = 0; - localStorage.setItem("user", JSON.stringify(oldUser)); + Auth.SetUser(oldUser); }, SetPreference(key: string, value: any) { - let preference = JSON.parse( - localStorage.getItem("user_preference") || "{}" - ); - preference = preference == null ? {} : preference; - preference[key] = value; - localStorage.setItem("user_preference", JSON.stringify(preference)); + Auth._preference[key] = value; + localStorage.setItem("user_preference", JSON.stringify(Auth._preference)); }, GetPreference(key: string): any | null { - const preference = JSON.parse( - localStorage.getItem("user_preference") || "{}" - ); - if (preference && preference[key] !== undefined) { - return preference[key]; - } - return null; + return Auth._preference[key] ?? null; }, GetPreferenceWithDefault(key: string, defaultVal: any): any { - return Auth.GetPreference(key) !== null - ? Auth.GetPreference(key) - : defaultVal; + return Auth.GetPreference(key) ?? defaultVal; }, };