Files
gg-backend/frontend/src/context/AuthContext.tsx
T

61 lines
1.1 KiB
TypeScript
Raw Normal View History

2026-05-26 15:48:01 +05:30
import { createContext, useContext, useState } from 'react';
import api from '@/services/api';
2026-03-12 17:56:52 +05:30
type AuthContextType = {
user: any;
token: string | null;
login: (username: string, password: string) => Promise<void>;
logout: () => void;
};
const AuthContext = createContext<AuthContextType | null>(null);
2026-05-26 15:48:01 +05:30
export function AuthProvider({ children }: { children: React.ReactNode }) {
const [token, setToken] = useState<string | null>(localStorage.getItem('token'));
2026-03-12 17:56:52 +05:30
const [user, setUser] = useState(null);
async function login(username: string, password: string) {
2026-05-26 15:48:01 +05:30
const response = await api.post('/auth/login', {
2026-03-12 17:56:52 +05:30
username,
password,
});
const token = response.data.token;
2026-05-26 15:48:01 +05:30
localStorage.setItem('token', token);
2026-03-12 17:56:52 +05:30
setToken(token);
}
function logout() {
2026-05-26 15:48:01 +05:30
localStorage.removeItem('token');
2026-03-12 17:56:52 +05:30
setToken(null);
setUser(null);
}
return (
<AuthContext.Provider
value={{
user,
token,
login,
logout,
}}
>
{children}
</AuthContext.Provider>
);
}
export function useAuth() {
const context = useContext(AuthContext);
if (!context) {
2026-05-26 15:48:01 +05:30
throw new Error('useAuth must be used inside AuthProvider');
2026-03-12 17:56:52 +05:30
}
return context;
}