Files
ai-learning-platform/frontend/src/lib/auth-context.tsx
T

50 lines
1.3 KiB
TypeScript

'use client';
import { createContext, useContext, useState, useEffect, useCallback, type ReactNode } from 'react';
interface AuthContextType {
isLoggedIn: boolean;
initialized: boolean;
login: (token: string, refreshToken?: string) => void;
logout: () => void;
}
const AuthContext = createContext<AuthContextType>({
isLoggedIn: false,
initialized: false,
login: () => {},
logout: () => {},
});
export function AuthProvider({ children }: { children: ReactNode }) {
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [initialized, setInitialized] = useState(false);
useEffect(() => {
setIsLoggedIn(!!localStorage.getItem('token'));
setInitialized(true);
}, []);
const login = useCallback((token: string, refreshTk?: string) => {
localStorage.setItem('token', token);
if (refreshTk) localStorage.setItem('refreshToken', refreshTk);
setIsLoggedIn(true);
}, []);
const logout = useCallback(() => {
localStorage.removeItem('token');
localStorage.removeItem('refreshToken');
setIsLoggedIn(false);
}, []);
return (
<AuthContext.Provider value={{ isLoggedIn, initialized, login, logout }}>
{children}
</AuthContext.Provider>
);
}
export function useAuth() {
return useContext(AuthContext);
}