32 lines
854 B
TypeScript
32 lines
854 B
TypeScript
import { create } from 'zustand';
|
|||
|
|
|
||
|
|
export interface User {
|
||
|
|
id: number;
|
||
|
|
username: string;
|
||
|
|
email: string;
|
||
|
|
is_admin: boolean;
|
||
|
|
}
|
||
|
|
|
||
|
|
interface AuthState {
|
||
|
|
user: User | null;
|
||
|
|
token: string | null;
|
||
|
|
isAuthenticated: boolean;
|
||
|
|
login: (user: User, token: string) => void;
|
||
|
|
logout: () => void;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const useAuthStore = create<AuthState>((set) => ({
|
||
|
|
user: JSON.parse(localStorage.getItem('user') || 'null'),
|
||
|
|
token: localStorage.getItem('token'),
|
||
|
|
isAuthenticated: !!localStorage.getItem('token'),
|
||
|
|
login: (user, token) => {
|
||
|
|
localStorage.setItem('user', JSON.stringify(user));
|
||
|
|
localStorage.setItem('token', token);
|
||
|
|
set({ user, token, isAuthenticated: true });
|
||
|
|
},
|
||
|
|
logout: () => {
|
||
|
|
localStorage.removeItem('user');
|
||
|
|
localStorage.removeItem('token');
|
||
|
|
set({ user: null, token: null, isAuthenticated: false });
|
||
|
|
},
|
||
|
|
}));
|