-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmiddleware.ts
49 lines (40 loc) · 1.57 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import { NextRequest, NextResponse } from 'next/server'
export async function middleware(request: NextRequest) {
const url = request.nextUrl.pathname;
if (url === "/") {
return NextResponse.redirect(new URL('/matching', request.url));
}
// 로그아웃 컨트롤
if (url.startsWith('/logout')) {
// 회원토큰이 없다면 로그인&회원가입 페이지로 이동
if (!request.cookies.has('access_token')) {
return NextResponse.redirect(new URL('/login', request.url));
}
// 회원토큰이 있다면 로그아웃 처리
const response = NextResponse.next();
response.cookies.delete('access_token');
return response;
}
// 로그인&회원가입 컨트롤
if (url.startsWith('/login') || url.startsWith('/signup')) {
// 회원토큰이 있다면 메인페이지로 이동
if (request.cookies.has('access_token')) {
return NextResponse.redirect(new URL('/', request.url));
}
// 회원토큰이 없다면 로그인&회원가입 페이지로 이동
else {
return;
}
}
// 회원 전용 페이지 컨트롤
if (url.startsWith('/agreement') || url.startsWith('/application') || url.startsWith('/etc') || url.startsWith('/leave') || url.startsWith('/matching') || url.startsWith('/my_info') || url.startsWith('/promotion')) {
// 회원 토큰이 정상적이라면 통과
if (request.cookies.has('access_token')) {
return;
}
// 회원 토큰이 없다면 로그인&회원가입 페이지로 이동
else {
return NextResponse.redirect(new URL('/login', request.url));
}
}
}