44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import {User} from "@/types/users";
|
|
import axios from "axios";
|
|
import {create} from "zustand";
|
|
|
|
export type SessionState = {
|
|
user: User | null;
|
|
token: string | null;
|
|
setSession: (user: User | null, token: string | null) => void;
|
|
clearSession: () => void;
|
|
};
|
|
|
|
export const useSessionStore = create<SessionState>((set) => {
|
|
// Initialize token from localStorage, but user remains in memory only
|
|
const storedToken = localStorage.getItem("auth_token");
|
|
|
|
return {
|
|
user: null, // User is NOT stored in localStorage
|
|
token: storedToken || null,
|
|
|
|
setSession: async (user: any, token) => {
|
|
if (token) {
|
|
localStorage.setItem("auth_token", token);
|
|
const response = await axios.get("/api/auth/getuseraccess", {
|
|
headers: {Authorization: `Bearer ${token}`},
|
|
});
|
|
const data = response.data; //await response.json();
|
|
user = {...user, roles: data.data};
|
|
} else {
|
|
localStorage.removeItem("auth_token");
|
|
}
|
|
|
|
//console.log("Setting session:", {user, token});
|
|
set({user, token});
|
|
},
|
|
|
|
clearSession: () => {
|
|
localStorage.removeItem("auth_token");
|
|
set({user: null, token: null});
|
|
},
|
|
};
|
|
});
|
|
|
|
export type SessionType = ReturnType<typeof useSessionStore>;
|