import React from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../auth/context'; import { isAuthError } from '../auth/tokens'; import { ADMIN_DEFAULT_AFTER_LOGIN_PATH } from '../constants'; export default function AuthCallbackPage() { const { completeLogin } = useAuth(); const navigate = useNavigate(); const [error, setError] = React.useState(null); const hasHandledRef = React.useRef(false); React.useEffect(() => { if (hasHandledRef.current) { return; } hasHandledRef.current = true; const params = new URLSearchParams(window.location.search); completeLogin(params) .then((redirectTo) => { navigate(redirectTo ?? ADMIN_DEFAULT_AFTER_LOGIN_PATH, { replace: true }); }) .catch((err) => { console.error('[Auth] Callback processing failed', err); if (isAuthError(err) && err.code === 'token_exchange_failed') { setError('Anmeldung fehlgeschlagen. Bitte versuche es erneut.'); } else if (isAuthError(err) && err.code === 'invalid_state') { setError('Ungültiger Login-Vorgang. Bitte starte die Anmeldung erneut.'); } else { setError('Unbekannter Fehler beim Login.'); } }); }, [completeLogin, navigate]); return (
Anmeldung wird verarbeitet ... {error &&
{error}
}
); }