ai-wpa/app/api/auth/logout/route.ts

63 lines
1.6 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import connectDB from '@/lib/mongodb'
import { User } from '@/models/user'
import { verifyRefreshToken } from '@/lib/jwt'
export async function POST(request: NextRequest) {
try {
// Get refresh token from cookie
const refreshToken = request.cookies.get('refreshToken')?.value
if (refreshToken) {
// Verify and decode the refresh token to get user ID
const payload = verifyRefreshToken(refreshToken)
if (payload) {
// Connect to database and remove refresh token
await connectDB()
await User.findByIdAndUpdate(payload.userId, {
$unset: { refreshToken: 1 },
})
}
}
// Create response
const response = NextResponse.json({
success: true,
data: { message: 'Logged out successfully' },
})
// Clear cookies
response.cookies.set('accessToken', '', {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'lax',
maxAge: 0,
path: '/',
})
response.cookies.set('refreshToken', '', {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'lax',
maxAge: 0,
path: '/',
})
return response
} catch (error) {
console.error('Logout error:', error)
// Even if there's an error, we should still clear the cookies
const response = NextResponse.json({
success: true,
data: { message: 'Logged out successfully' },
})
response.cookies.set('accessToken', '', { maxAge: 0, path: '/' })
response.cookies.set('refreshToken', '', { maxAge: 0, path: '/' })
return response
}
}