31 lines
1.2 KiB
Plaintext
31 lines
1.2 KiB
Plaintext
// POST /api/auth/logout — 退出登录(清除 cookie + 302 跳转 /login)
|
||
import { NextResponse } from 'next/server'
|
||
|
||
const autheliaUrl = process.env.AUTHELIA_URL || 'https://sso.tlyq.ai'
|
||
const cookieDomain = process.env.COOKIE_DOMAIN || '.tlyq.ai'
|
||
|
||
// GET: 浏览器导航 → 302 到 Authelia end_session(带 rd 回跳 /login)
|
||
export async function GET() {
|
||
const returnUrl = `${process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:6179'}/login`
|
||
const response = NextResponse.redirect(
|
||
`${autheliaUrl}/api/oidc/end_session?rd=${encodeURIComponent(returnUrl)}`
|
||
)
|
||
response.cookies.set('tlyq_session', '', {
|
||
httpOnly: true, secure: process.env.NODE_ENV === 'production',
|
||
sameSite: 'lax', domain: cookieDomain, path: '/', maxAge: 0,
|
||
})
|
||
response.cookies.set('session', '', { path: '/', maxAge: 0 })
|
||
return response
|
||
}
|
||
|
||
// POST: fetch 调用 → 清除 cookie + 返回 200 JSON
|
||
export async function POST() {
|
||
const response = NextResponse.json({ success: true })
|
||
response.cookies.set('tlyq_session', '', {
|
||
httpOnly: true, secure: process.env.NODE_ENV === 'production',
|
||
sameSite: 'lax', domain: cookieDomain, path: '/', maxAge: 0,
|
||
})
|
||
response.cookies.set('session', '', { path: '/', maxAge: 0 })
|
||
return response
|
||
}
|