first commit

This commit is contained in:
2025-07-21 00:45:28 +02:00
parent ab10b0f9a1
commit 93232a1663
39 changed files with 4860 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
import React, { createContext, useContext, useState, useEffect } from 'react';
import { api } from '../services/api';
const AuthContext = createContext();
export function useAuth() {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuth must be used within an AuthProvider');
}
return context;
}
export function AuthProvider({ children }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
const [token, setToken] = useState(localStorage.getItem('auth_token'));
useEffect(() => {
if (token) {
api.setAuthToken(token);
verifyToken();
} else {
setLoading(false);
}
}, [token]);
const verifyToken = async () => {
try {
const response = await api.verifyToken();
setUser(response.data.user);
} catch (error) {
console.error('Token verification failed:', error);
logout();
} finally {
setLoading(false);
}
};
const login = (authToken) => {
setToken(authToken);
localStorage.setItem('auth_token', authToken);
api.setAuthToken(authToken);
};
const logout = () => {
setToken(null);
setUser(null);
localStorage.removeItem('auth_token');
api.setAuthToken(null);
};
const value = {
user,
token,
loading,
login,
logout,
isAuthenticated: !!user
};
return (
<AuthContext.Provider value={value}>
{children}
</AuthContext.Provider>
);
}