2026-04-17 11:32:17 +08:00

44 lines
1.1 KiB
TypeScript

import { type NextRequest, NextResponse } from "next/server";
import {
CAREGIVER_SESSION_COOKIE,
createCaregiverSessionCookieValue,
getCaregiverSession,
} from "@/lib/session";
import { prisma } from "@/lib/prisma";
function normalizeRedirectPath(redirectTo?: string | null) {
if (!redirectTo || !redirectTo.startsWith("/") || redirectTo.startsWith("//")) {
return "/";
}
return redirectTo;
}
export async function GET(request: NextRequest) {
const redirectTo = normalizeRedirectPath(
request.nextUrl.searchParams.get("redirectTo"),
);
const existingCaregiver = await getCaregiverSession();
const response = NextResponse.redirect(new URL(redirectTo, request.url));
if (existingCaregiver) {
return response;
}
const { sessionToken, options } = createCaregiverSessionCookieValue();
await prisma.caregiverAccount.upsert({
where: { sessionToken },
update: {},
create: { sessionToken },
});
response.cookies.set({
name: CAREGIVER_SESSION_COOKIE,
value: sessionToken,
...options,
});
return response;
}