-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmiddleware.ts
31 lines (27 loc) · 1.02 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 {type NextRequest, NextResponse} from "next/server";
import {
LOGIN_ROUTE,
ROOT_ROUTE,
SESSION_COOKIE_NAME,
SIGN_UP_ROUTE,
CHAT_ROUTE,
PROFILE_ROUTE,
} from "./constants";
const protectedRoutes = [ROOT_ROUTE, CHAT_ROUTE, PROFILE_ROUTE];
const unprotectedRoutes = [LOGIN_ROUTE, SIGN_UP_ROUTE];
export default function middleware(request: NextRequest) {
const session =
request.cookies.get(SESSION_COOKIE_NAME)?.value ||
request.headers.get(SESSION_COOKIE_NAME) ||
"";
// Redirect to login if session is not set
if (!session && protectedRoutes.includes(request.nextUrl.pathname)) {
const absoluteURL = new URL(LOGIN_ROUTE, request.nextUrl.origin);
return NextResponse.redirect(absoluteURL.toString());
}
// Redirect to root if session is set and user tries to access unprotected routes
if (session && unprotectedRoutes.includes(request.nextUrl.pathname)) {
const absoluteURL = new URL(ROOT_ROUTE, request.nextUrl.origin);
return NextResponse.redirect(absoluteURL.toString());
}
}