Skip to content
Migrating from NextAuth.js v4? Read our migration guide.

리소스 보호

라우트를 보호하는 일반적인 방법은 세션을 확인하고, 활성 세션이 없을 때 사용자를 로그인 페이지로 리다이렉트하거나 401: Unauthenticated 응답을 반환하는 것입니다.

Pages

auth.ts 또는 auth.js 설정 파일에서 내보낸 NextAuth()auth 함수를 사용하여 세션 객체를 가져올 수 있습니다.

app/server/page.tsx
import { auth } from "@/auth"
 
export default async function Page() {
  const session = await auth()
  if (!session) return <div>Not authenticated</div>
 
  return (
    <div>
      <pre>{JSON.stringify(session, null, 2)}</pre>
    </div>
  )
}

API Routes

다양한 프레임워크에서 API 라우트를 보호하는 것도 auth 내보내기를 사용해 할 수 있습니다.

Next.js에서는 auth 함수를 사용해 API 라우트 핸들러를 감쌀 수 있습니다. 그러면 요청 매개변수에 auth 키가 생기고, 이를 통해 유효한 세션을 확인할 수 있습니다.

./app/api/admin/route.ts
import { auth } from "@/auth"
import { NextResponse } from "next/server"
 
export const GET = auth(function GET(req) {
  if (req.auth) return NextResponse.json(req.auth)
  return NextResponse.json({ message: "Not authenticated" }, { status: 401 })
})

Next.js 미들웨어

Next.js 12 이상에서는 페이지를 보호하는 가장 쉬운 방법은 미들웨어 파일을 사용하는 것입니다. 루트 페이지 디렉토리에 middleware.ts 파일을 생성하고 다음과 같이 작성할 수 있습니다.

middleware.ts
export { auth as middleware } from "@/auth"

그런 다음 auth.ts 파일에서 authorized 콜백을 정의합니다. 자세한 내용은 참조 문서를 확인하세요.

auth.ts
import NextAuth from "next-auth"
 
export const { auth, handlers } = NextAuth({
  callbacks: {
    authorized: async ({ auth }) => {
      // 로그인한 사용자는 인증된 상태, 그렇지 않으면 로그인 페이지로 리다이렉트
      return !!auth
    },
  },
})

미들웨어 내부에서 더 많은 로직을 구현하고 싶다면 auth 메서드를 래퍼로 사용할 수도 있습니다.

middleware.ts
import { auth } from "@/auth"
 
export default auth((req) => {
  if (!req.auth && req.nextUrl.pathname !== "/login") {
    const newUrl = new URL("/login", req.nextUrl.origin)
    return Response.redirect(newUrl)
  }
})

여러 라우트를 매칭하기 위해 정규식을 사용하거나 특정 라우트를 제외하여 나머지 모든 라우트를 보호할 수도 있습니다. 다음 예제는 파비콘이나 정적 이미지와 같은 경로에서 미들웨어가 실행되지 않도록 합니다.

middleware.ts
export const config = {
  matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
}

미들웨어는 matcher 설정에 따라 페이지를 보호합니다. 매처에 대한 자세한 내용은 Next.js 문서를 참조하세요.

💡

권한 부여를 위해 미들웨어에만 의존해서는 안 됩니다. 항상 데이터를 가져오는 부분에서 세션을 검증하는 것이 중요합니다.

Auth.js © Balázs Orbán and Team - 2025