import { useEffect, useState } from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; import { setAccessToken } from '../api/client'; import { useAuth } from './AuthContext'; /** * SsoCallbackPage - Verarbeitet den SSO-Callback vom Backend. * * Das Backend redirectet hierher mit dem Access-Token als Query-Parameter: * /auth/sso/callback?token=eyJhbGci... * * Diese Seite: * 1. Liest den Token aus der URL * 2. Setzt ihn im AuthContext (loginWithToken) * 3. Laedt das User-Profil * 4. Navigiert zum Dashboard */ export function SsoCallbackPage() { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const { loginWithToken } = useAuth(); const [error, setError] = useState(''); useEffect(() => { const handleCallback = async () => { const token = searchParams.get('token'); if (!token) { setError('Kein Token in der SSO-Antwort gefunden.'); setTimeout(() => navigate('/login'), 2000); return; } try { // Token setzen und User-Profil laden await loginWithToken(token); // Zum Dashboard navigieren navigate('/', { replace: true }); } catch { setError('SSO-Anmeldung fehlgeschlagen. Bitte erneut versuchen.'); setAccessToken(null); setTimeout(() => navigate('/login'), 2000); } }; handleCallback(); }, [searchParams, navigate, loginWithToken]); return (
{error ? ( <>

{error}

Sie werden zur Login-Seite weitergeleitet...

) : ( <>

Anmeldung wird abgeschlossen...

)}
); }