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
+18
View File
@@ -465,3 +465,21 @@ def test_ohne_einstellung_kommt_die_adresse_aus_der_anfrage(client, anbieter):
r = client.get("/api/auth/oidc/authentik/start", follow_redirects=False)
frage = parse_qs(urlparse(r.headers["location"]).query)
assert frage["redirect_uri"][0].endswith("/api/auth/oidc/authentik/callback")
def test_unerreichbarer_anbieter_zeigt_keine_json_seite(client, anbieter, monkeypatch):
"""Hier steht ein Browser, der einem Link gefolgt ist. Eine Fehlerantwort
waere eine Seite mit rohem JSON – der Grund gehoert in die Oberflaeche."""
from app.services import oidc as oidc_service
def kaputt(*a, **kw):
raise oidc_service.OidcFehler("Der Anmeldedienst ist nicht erreichbar: "
"[Errno -2] Name or service not known")
monkeypatch.setattr("app.services.oidc.start", kaputt)
r = client.get("/api/auth/oidc/authentik/start", follow_redirects=False)
assert r.status_code == 303, r.text
ziel = r.headers["location"]
assert ziel.startswith("/login"), ziel
assert "oidc_error" in ziel
assert "Name+or+service" in ziel or "Name%20or%20service" in ziel