Fix live test follow-up issues

This commit is contained in:
t.indorf
2026-05-19 14:28:32 +02:00
parent 3fa3b9b108
commit 99ff978116
9 changed files with 79 additions and 24 deletions
+9 -5
View File
@@ -18,6 +18,7 @@ import { signIn } from "@/auth";
const loginSchema = z.object({
email: z.string().email("Bitte eine gültige E-Mail-Adresse angeben.").toLowerCase().trim(),
password: z.string().min(1, "Passwort fehlt."),
callbackUrl: z.string().optional(),
});
export type LoginState = {
@@ -28,6 +29,12 @@ export type LoginState = {
};
};
function safeCallbackUrl(value: string | undefined) {
if (!value) return "/dashboard";
if (!value.startsWith("/") || value.startsWith("//")) return "/dashboard";
return value;
}
export async function loginAction(
_prev: LoginState,
formData: FormData,
@@ -37,16 +44,13 @@ export async function loginAction(
return { errors: parsed.error.flatten().fieldErrors };
}
const { email, password } = parsed.data;
const redirectTo = safeCallbackUrl(parsed.data.callbackUrl);
try {
await signIn("credentials", {
email,
password,
// Auth-Utils entscheiden im Folge-Render, ob /onboarding oder /dashboard.
// Wir landen aus Sicherheitsgründen erstmal generisch auf der Wurzel.
// Der Proxy (proxy.ts) übernimmt das Routing:
// → /onboarding wenn kein kitaId, → /dashboard wenn vorhanden.
redirectTo: "/",
redirectTo,
});
} catch (err) {
// signIn wirft NEXT_REDIRECT bei Erfolg → das müssen wir bewusst