From 4b8a41d9289031eadd5c2f9993c80e8b329237e7 Mon Sep 17 00:00:00 2001 From: hobokenchicken Date: Wed, 22 Apr 2026 14:00:19 -0400 Subject: [PATCH] fix: persist auth across refresh --- frontend/src/lib/store.ts | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/frontend/src/lib/store.ts b/frontend/src/lib/store.ts index ee7bdb5..96e68d3 100644 --- a/frontend/src/lib/store.ts +++ b/frontend/src/lib/store.ts @@ -19,13 +19,39 @@ interface AppState { logout: () => void; } +const initialUser = + typeof window !== "undefined" + ? (() => { + const raw = localStorage.getItem("user"); + return raw ? (JSON.parse(raw) as User) : null; + })() + : null; +const initialToken = + typeof window !== "undefined" ? localStorage.getItem("token") : null; + export const useStore = create()((set) => ({ - user: null, - token: null, - isAuthenticated: false, - setUser: (user) => set({ user, isAuthenticated: !!user }), - setToken: (token) => set({ token }), + user: initialUser, + token: initialToken, + isAuthenticated: !!initialToken, + setUser: (user) => { + if (typeof window !== "undefined") { + if (user) localStorage.setItem("user", JSON.stringify(user)); + else localStorage.removeItem("user"); + } + set({ user, isAuthenticated: !!user }); + }, + setToken: (token) => { + if (typeof window !== "undefined") { + if (token) localStorage.setItem("token", token); + else localStorage.removeItem("token"); + } + set({ token, isAuthenticated: !!token }); + }, logout: () => { + if (typeof window !== "undefined") { + localStorage.removeItem("user"); + localStorage.removeItem("token"); + } set({ user: null, token: null, isAuthenticated: false }); }, }));