/
lostSun
/
project-client-server-apps
Обзор
Документация
Войти
/
lostSun
/
project-client-server-apps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/contexts/AuthContext.js
93 строки
2 KB
1lostsun
update project
25 май 2025, 13:12
25 май 2025, 13:12
78a0079
Код
Авторство
О чём код?
import React, { createContext, useState, useContext, useEffect } from 'react'; const AuthContext = createContext(null); export const AuthProvider = ({ children }) => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const token = localStorage.getItem('token'); if (token) { fetch('http://localhost:3001/api/user', { headers: { 'Authorization': `Bearer ${token}` } }) .then(res => res.json()) .then(data => { if (!data.error) { setUser(data); } }) .finally(() => setLoading(false)); } else { setLoading(false); } }, []); const login = async (email, password) => { const response = await fetch('http://localhost:3001/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, password }) }); const data = await response.json(); if (data.error) { throw new Error(data.error); } localStorage.setItem('token', data.token); setUser({ username: data.username }); return data; }; const register = async (username, email, password) => { const response = await fetch('http://localhost:3001/api/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, email, password }) }); const data = await response.json(); if (data.error) { throw new Error(data.error); } localStorage.setItem('token', data.token); setUser({ username: data.username }); return data; }; const logout = () => { localStorage.removeItem('token'); setUser(null); }; const value = { user, loading, login, register, logout }; return ( <AuthContext.Provider value={value}> {!loading && children} </AuthContext.Provider> ); }; export const useAuth = () => { const context = useContext(AuthContext); if (!context) { throw new Error('useAuth must be used within an AuthProvider'); } return context; };