initial commit
This commit is contained in:
62
app/api/auth/logout/route.ts
Normal file
62
app/api/auth/logout/route.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user