fix: persist auth across refresh
This commit is contained in:
@@ -19,13 +19,39 @@ interface AppState {
|
|||||||
logout: () => void;
|
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<AppState>()((set) => ({
|
export const useStore = create<AppState>()((set) => ({
|
||||||
user: null,
|
user: initialUser,
|
||||||
token: null,
|
token: initialToken,
|
||||||
isAuthenticated: false,
|
isAuthenticated: !!initialToken,
|
||||||
setUser: (user) => set({ user, isAuthenticated: !!user }),
|
setUser: (user) => {
|
||||||
setToken: (token) => set({ token }),
|
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: () => {
|
logout: () => {
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
localStorage.removeItem("user");
|
||||||
|
localStorage.removeItem("token");
|
||||||
|
}
|
||||||
set({ user: null, token: null, isAuthenticated: false });
|
set({ user: null, token: null, isAuthenticated: false });
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|||||||
Reference in New Issue
Block a user