返回 CodeWhale
route.ts
根目录 / web / app / api / admin / logout / route.ts
1 import { NextResponse } from "next/server";
2 import { getAgentEnv, deleteSession } from "@/lib/community-agent";
3
4 export const dynamic = "force-dynamic";
5
6 const ALLOWED_LOCALES = new Set(["en", "zh"]);
7
8 function pickLocale(value: string | null | undefined): string {
9 if (!value) return "en";
10 return ALLOWED_LOCALES.has(value) ? value : "en";
11 }
12
13 export async function POST(req: Request) {
14 const env = await getAgentEnv();
15 const url = new URL(req.url);
16 const locale = pickLocale(url.searchParams.get("locale"));
17
18 const cookieHeader = req.headers.get("cookie") ?? "";
19 let sid: string | undefined;
20 for (const c of cookieHeader.split(";")) {
21 const [name, ...rest] = c.trim().split("=");
22 if (name === "mt_sid") {
23 sid = rest.join("=");
24 break;
25 }
26 }
27
28 await deleteSession(env.CURATED_KV, sid);
29
30 const res = NextResponse.redirect(new URL(`/${locale}/admin`, req.url), {
31 status: 303,
32 headers: { "Cache-Control": "no-store" },
33 });
34 res.cookies.set("mt_sid", "", {
35 path: "/",
36 httpOnly: true,
37 secure: true,
38 sameSite: "strict",
39 maxAge: 0,
40 });
41 return res;
42 }
43
43 lines TYPESCRIPT