shared/lib/auth/handle-logout.ts

36 lines
1.0 KiB
TypeScript

// shared/lib/auth/handle-logout.ts — 登出工厂(步骤 1a 新增)
// 清除 tlyq_session cookie → 返回 200 JSON
import { NextResponse, type NextRequest } from 'next/server'
interface HandleOidcLogoutConfig {
cookieDomain: string
}
/** 登出:清除 tlyq_session 和 OIDC 临时 cookie → 返回 200 JSON */
export function handleOidcLogout(_req: NextRequest, config: HandleOidcLogoutConfig): NextResponse {
const response = NextResponse.json({ success: true })
// 清除 tlyq_session
response.cookies.set('tlyq_session', '', {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'lax' as const,
domain: config.cookieDomain,
path: '/',
maxAge: 0,
})
// 清除 OIDC 临时 cookie
for (const name of ['oidc_code_verifier', 'oidc_state', 'oidc_nonce']) {
response.cookies.set(name, '', {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'lax' as const,
path: '/',
maxAge: 0,
})
}
return response
}