// server/api/auth/logout.get.ts - 登出接口:尽量通知 NewAPI 销毁 session,并清理本地登录态。 import type { IUserLogoutData } from "#shared/types"; import { clearNewApiAuthCookies, createApiLogger, createSuccessResponse, newApiAuthedFetch, toSafeLogError } from "~~/server/utils"; /** * GET /api/auth/logout * * 流程: * 1. 使用本站 httpOnly cookie 中的 NewAPI session 调用上游登出。 * 2. 无论上游登出是否成功,都清理本站保存的 session/userId cookie。 * 3. 返回统一成功响应,避免坏 session 残留影响后续登录。 */ export default defineEventHandler(async (event) => { const logger = createApiLogger("auth.logout"); logger.info("开始"); try { // 带上本站 httpOnly cookie 中的 NewAPI 登录态,请求上游销毁 session。 await newApiAuthedFetch(event, "/api/user/logout", { method: "GET" }); logger.info("上游登出成功"); } catch (error) { // 上游 session 可能已失效,本地仍然必须清理,避免残留坏登录态。 logger.warn("上游登出失败,继续清理本地登录态", { error: toSafeLogError(error) }); } finally { clearNewApiAuthCookies(event); } logger.done("成功"); return createSuccessResponse(null, "登出成功"); });