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

63 lines
1.1 KiB
TypeScript
Raw Normal View History

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