import React, { createContext, useContext, useState, useEffect } from 'react' import axios from 'axios' const AuthContext = createContext() export const useAuth = () => { const context = useContext(AuthContext) if (!context) { throw new Error('useAuth must be used within an AuthProvider') } return context } export const AuthProvider = ({ children }) => { const [user, setUser] = useState(null) const [loading, setLoading] = useState(true) useEffect(() => { const token = localStorage.getItem('token') if (token) { axios.defaults.headers.common['Authorization'] = `Bearer ${token}` checkAuthStatus() } else { setLoading(false) } }, []) const checkAuthStatus = async () => { try { const response = await axios.get('/api/auth/profile') setUser(response.data.data) } catch (error) { localStorage.removeItem('token') delete axios.defaults.headers.common['Authorization'] } finally { setLoading(false) } } const login = async (credentials) => { try { const response = await axios.post('/api/auth/login', credentials) const { token, user } = response.data.data localStorage.setItem('token', token) axios.defaults.headers.common['Authorization'] = `Bearer ${token}` setUser(user) return { success: true } } catch (error) { return { success: false, message: error.response?.data?.message || '登录失败' } } } const register = async (userData) => { try { const response = await axios.post('/api/auth/register', userData) const { token, user } = response.data.data localStorage.setItem('token', token) axios.defaults.headers.common['Authorization'] = `Bearer ${token}` setUser(user) return { success: true } } catch (error) { return { success: false, message: error.response?.data?.message || '注册失败' } } } const logout = () => { localStorage.removeItem('token') delete axios.defaults.headers.common['Authorization'] setUser(null) } const value = { user, loading, login, register, logout } return ( {children} ) }