fix: Ein unerreichbarer Anmeldedienst zeigte eine Seite mit rohem JSON

Auf "Mit Authentik anmelden" folgt der BROWSER einem Link – da steht kein
fetch(), das eine Fehlerantwort auswerten koennte. Scheiterte der Aufruf des
Anmeldedienstes (Tippfehler in der Discovery-Adresse, Name nicht aufloesbar),
landete der Nutzer auf einer weissen Seite mit {"detail": ...} und musste
zurueckdruecken.

Jetzt geht es zurueck in die Oberflaeche, mit dem Grund in der Adresse – genau
wie bei der Rueckkehr vom Anbieter. Beim Anmelden auf die Login-Seite, beim
Verknuepfen auf "Mein Konto".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-09 19:54:20 +02:00
co-authored by Claude Opus 5
parent bd2c623136
commit 62cb6a017c
2 changed files with 24 additions and 1 deletions
+6 -1
View File
@@ -115,10 +115,15 @@ def _beginne(db: Session, request: Request, provider: str, weiter: str | None,
link_user: User | None) -> RedirectResponse:
p = _hole_provider(provider)
ziel = _redirect_uri(request, p.name)
zurueck = _sicheres_ziel(weiter) if link_user is None else _sicheres_ziel(weiter or "/konto")
try:
begonnen = oidc_service.start(p, ziel)
except oidc_service.OidcFehler as e:
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY, detail=str(e)) from e
# Hier steht ein BROWSER, der einem Link gefolgt ist – keine Antwort auf
# fetch(). Eine Fehlerantwort waere eine Seite mit rohem JSON. Also
# zurueck in die Oberflaeche, mit dem Grund in der Adresse, genau wie
# bei der Rueckkehr vom Anbieter.
return _fehlerseite(zurueck if link_user is not None else "/login", str(e))
# Abgelaufene Versuche wegraeumen – sonst waechst die Tabelle still.
db.query(OidcState).filter(OidcState.expires_at < _now()).delete()