Spaces:
Runtime error
Runtime error
| import React, { createContext, useContext, useState, useEffect } from 'react'; | |
| import api from '../api/axiosConfig'; | |
| 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(() => { | |
| checkAuth(); | |
| }, []); | |
| const checkAuth = async () => { | |
| try { | |
| const response = await api.get('/auth/me'); | |
| setUser(response.data); | |
| } catch (error) { | |
| console.log('Auth check failed:', error.message); | |
| setUser(null); | |
| } finally { | |
| setLoading(false); | |
| } | |
| }; | |
| const login = async (email, password) => { | |
| try { | |
| const response = await api.post('/auth/login', { email, password }); | |
| if (response.data.access_token) { | |
| localStorage.setItem('access_token', response.data.access_token); | |
| } | |
| await checkAuth(); | |
| return response.data; | |
| } catch (error) { | |
| console.error('Login error:', error.response?.data); | |
| const message = error.response?.data?.message || error.response?.data?.error || error.response?.data?.detail || error.message; | |
| throw message; | |
| } | |
| }; | |
| const register = async (email, password) => { | |
| try { | |
| const response = await api.post('/auth/register', { email, password }); | |
| return response.data; | |
| } catch (error) { | |
| console.error('Registration error:', error.response?.data); | |
| const message = error.response?.data?.message || error.response?.data?.error || error.response?.data?.detail || error.message; | |
| throw message; | |
| } | |
| }; | |
| const googleLogin = async (idToken) => { | |
| try { | |
| const response = await api.post('/auth/google', { id_token: idToken }); | |
| if (response.data.access_token) { | |
| localStorage.setItem('access_token', response.data.access_token); | |
| } | |
| await checkAuth(); | |
| return response.data; | |
| } catch (error) { | |
| console.error('Google login error:', error.response?.data); | |
| const message = error.response?.data?.message || error.response?.data?.error || error.response?.data?.detail || error.message; | |
| throw message; | |
| } | |
| }; | |
| const logout = async () => { | |
| try { | |
| await api.post('/auth/logout'); | |
| } catch (error) { | |
| console.error('Logout error:', error); | |
| } finally { | |
| localStorage.removeItem('access_token'); | |
| setUser(null); | |
| } | |
| }; | |
| const value = { | |
| user, | |
| login, | |
| googleLogin, | |
| register, | |
| logout, | |
| loading | |
| }; | |
| return ( | |
| <AuthContext.Provider value={value}> | |
| {children} | |
| </AuthContext.Provider> | |
| ); | |
| }; | |