import React, { createContext, useContext, useState, useEffect } from 'react'; const UserContext = createContext(); export function UserProvider({ children }) { const [user, setUser] = useState(null); const [token, setToken] = useState(null); const [isCheckingAuth, setIsCheckingAuth] = useState(true); useEffect(() => { // Инициализация из localStorage const storedUser = localStorage.getItem('user'); const storedToken = localStorage.getItem('token'); if (storedUser && storedToken) { setUser(JSON.parse(storedUser)); setToken(storedToken); // Проверка токена fetch('/api/auth/verify', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${storedToken}` }, body: JSON.stringify({ token: storedToken }) }) .then(res => { if (!res.ok) throw new Error('Invalid token'); return res.json(); }) .then(() => { setIsCheckingAuth(false); }) .catch(() => { logout(); window.location.href = '/login'; }); } else { setIsCheckingAuth(false); } // eslint-disable-next-line }, []); const login = (user, token) => { setUser(user); setToken(token); localStorage.setItem('user', JSON.stringify(user)); localStorage.setItem('token', token); }; const logout = () => { setUser(null); setToken(null); localStorage.removeItem('user'); localStorage.removeItem('token'); }; return ( {children} ); } export function useUser() { return useContext(UserContext); }