개발/web

[Nextjs] middleware

tting 2023. 3. 29. 17:15

Server side에서 인증 과정을 통합하기 위해 찾아보다 Nextjs 12부터 middleware를 지원하는 것을 알았다.

 

프로젝트 폴더에 middleware.ts를 만들고 경로를 지정해주면 middleware로 동작한다.

import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";

const passingPath = ["/login", "/signup"];
const homePath = ["/"];
const checkingPath = ["/diary"];

export function middleware(req: NextRequest) {
  const { pathname, origin } = req.nextUrl;
  const token = req.cookies.get("Authorization")?.value;

  if (token && passingPath.includes(pathname)) {
    return NextResponse.redirect(origin);
  }

  if (
    !token &&
    (homePath.includes(pathname) ||
      checkingPath.some((path) => pathname.startsWith(path)))
  ) {
    return NextResponse.redirect(`${origin}/login`);
  }

  return NextResponse.next();
}

인증 과정을 통합할 것이기 때문에 따로 경로를 지정해주지 않았다.