fix: bug with avatar fixes
Some checks failed
Backend ci / build (pull_request) Has been cancelled

This commit is contained in:
d3m0k1d
2026-02-15 00:06:22 +03:00
parent 5d8b271da2
commit de2735eb16
6 changed files with 197 additions and 143 deletions

View File

@@ -0,0 +1,86 @@
import {
createContext,
useContext,
useState,
useEffect,
type ReactNode,
} from "react";
interface User {
name?: string;
email?: string;
avatar?: string;
}
interface AuthContextType {
user: User | null;
isLoading: boolean;
checkAuth: () => Promise<void>;
logout: () => void;
}
const AuthContext = createContext<AuthContextType | undefined>(undefined);
export function AuthProvider({ children }: { children: ReactNode }) {
const [user, setUser] = useState<User | null>(null);
const [isLoading, setIsLoading] = useState(true);
const checkAuth = async () => {
setIsLoading(true);
try {
const token = localStorage.getItem("auth_token");
if (!token) {
setUser(null);
setIsLoading(false);
return;
}
const response = await fetch("/api/session", {
headers: {
Authorization: `Bearer ${token}`,
},
});
if (response.ok) {
const data = await response.json();
setUser(data.user);
console.log("User loaded:", data.user);
} else {
console.error("Token invalid, removing");
localStorage.removeItem("auth_token");
setUser(null);
}
} catch (error) {
console.error("Auth check failed:", error);
localStorage.removeItem("auth_token");
setUser(null);
} finally {
setIsLoading(false);
}
};
const logout = () => {
localStorage.removeItem("auth_token");
setUser(null);
};
useEffect(() => {
checkAuth();
}, []);
return (
<AuthContext.Provider value={{ user, isLoading, checkAuth, logout }}>
{children}
</AuthContext.Provider>
);
}
// eslint-disable-next-line react-refresh/only-export-components
export function useAuth() {
const context = useContext(AuthContext);
if (!context) {
throw new Error("useAuth must be used within AuthProvider");
}
return context;
}