import { useEffect, useMemo, useState } from 'react' import './App.css' type UserProfile = { sub: string name?: string email?: string } function App() { const [loading, setLoading] = useState(true) const [user, setUser] = useState(null) const [error, setError] = useState(null) const apiBase = useMemo(() => import.meta.env.VITE_API_BASE_URL ?? '', []) useEffect(() => { const loadMe = async () => { try { const response = await fetch(`${apiBase}/api/me`, { credentials: 'include', }) if (response.status === 401) { setUser(null) return } if (!response.ok) { throw new Error(`Request failed with status ${response.status}`) } const data = await response.json() setUser(data.user ?? null) } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load session') } finally { setLoading(false) } } void loadMe() }, [apiBase]) const loginUrl = `${apiBase}/api/login` const logoutUrl = `${apiBase}/api/logout` return (

OIDC Login

Авторизация обрабатывается на Express сервере.

{loading &&

Проверяю сессию...

} {error &&

Ошибка: {error}

} {!loading && !user && ( Войти через OIDC )} {!loading && user && (

ID: {user.sub}

{user.name && (

Имя: {user.name}

)} {user.email && (

Email: {user.email}

)} Выйти
)}
) } export default App