Files
tripwithbonus/frontend/middlewares/middleware.ts
2025-05-19 11:54:30 +03:00

37 lines
1.0 KiB
TypeScript

import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
import { jwtDecode } from 'jwt-decode'
interface JWTPayload {
exp?: number
}
export function middleware(request: NextRequest) {
const accessToken = request.cookies.get('accessToken')?.value
const refreshToken = request.cookies.get('refreshToken')?.value
const isAuthPage = request.nextUrl.pathname.startsWith('/account')
if (isAuthPage && (!accessToken || !refreshToken)) {
return NextResponse.redirect(new URL('/login', request.url))
}
if (isAuthPage && accessToken) {
try {
const decoded = jwtDecode<JWTPayload>(accessToken)
if (decoded.exp && decoded.exp < Date.now() / 1000) {
return NextResponse.redirect(new URL('/login', request.url))
}
} catch (error) {
console.error('Token decode error:', error)
return NextResponse.redirect(new URL('/login', request.url))
}
}
return NextResponse.next()
}
export const config = {
matcher: ['/account/:path*'],
}