-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmiddleware.ts
31 lines (28 loc) · 1.08 KB
/
middleware.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import { MiddlewareConfig, NextRequest, NextResponse } from 'next/server'
import { jwtVerify } from 'jose'
const authUserOnlyURLs = /\/me(\/.*|)/gm
export const config: MiddlewareConfig = {
matcher: ['/me/:path*', '/']
}
export async function middleware(request: NextRequest) {
// проверка токена
if (request.cookies.has('token')) {
try {
// если тут что-то сломается, то токен не правильный и он удалиться
// получаем id из jwt
const secret = new TextEncoder().encode(process.env.TOKEN_SECRET)
await jwtVerify(request.cookies.get('token')?.value!, secret)
} catch (e) {
// ошибка (токен не верный)
// удаляем токен
const response = NextResponse.redirect(process.env.BASE_URL!)
response.cookies.delete('token')
return response
}
} else {
// нет токена
if (authUserOnlyURLs.test(request.nextUrl.pathname))
return NextResponse.redirect(process.env.BASE_URL!)
}
return NextResponse.next()
}