Das Cookie erhielt im Produktionsbau immer Secure und wurde ueber http vom Browser verworfen – nach der Anmeldung landete jeder Klick wieder auf der Anmeldeseite. Massgeblich ist jetzt das Schema in APP_URL. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { cookies } from "next/headers";
|
|
import { ueberHttps } from "@/lib/sitzung";
|
|
import { anmeldungStarten, oidcEinstellungen } from "@/server/auth/oidc";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
/** Schickt den Browser zum Anmeldedienst und merkt sich PKCE-Prüfwert und Zustand im Cookie. */
|
|
export async function GET(request: Request) {
|
|
const einstellungen = oidcEinstellungen();
|
|
if (!einstellungen) {
|
|
return Response.redirect(new URL("/login?fehler=oidc", request.url), 302);
|
|
}
|
|
|
|
const ziel = new URL(request.url).searchParams.get("ziel") ?? "/";
|
|
|
|
try {
|
|
const start = await anmeldungStarten(einstellungen);
|
|
const speicher = await cookies();
|
|
const optionen = {
|
|
httpOnly: true,
|
|
sameSite: "lax" as const,
|
|
secure: ueberHttps(),
|
|
path: "/",
|
|
maxAge: 600,
|
|
};
|
|
|
|
speicher.set("pl_oidc_pruefwert", start.pruefwert, optionen);
|
|
speicher.set("pl_oidc_zustand", start.zustand, optionen);
|
|
speicher.set("pl_oidc_ziel", ziel.startsWith("/") ? ziel : "/", optionen);
|
|
|
|
return Response.redirect(start.url, 302);
|
|
} catch (fehler) {
|
|
console.error("OIDC-Start fehlgeschlagen:", fehler);
|
|
return Response.redirect(new URL("/login?fehler=oidc", request.url), 302);
|
|
}
|
|
}
|