fix: persist auth across refresh
This commit is contained in:
@@ -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<AppState>()((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 });
|
||||
},
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user