Skip to content
Migrating from NextAuth.js v4? Read our migration guide.
가이드Extending the Session

세션 확장하기

Auth.js 라이브러리는 기본적으로 사용자의 민감한 정보가 실수로 노출되지 않도록 세션에 사용자 정보의 일부만 노출합니다. 이는 name, email, image입니다.

모든 콜백은 비동기 함수이므로 데이터베이스나 외부 API에서 추가 정보를 가져올 수도 있습니다.

일반적으로 사용되는 사례는 세션에 사용자의 id를 추가하는 것입니다. 아래에서는 사용 중인 세션 전략에 따라 이를 수행하는 방법을 보여줍니다.

JWT 사용하기

사용자 ID에 접근하려면 Auth.js 설정에 다음 내용을 추가하세요:

auth.ts
  // 기본적으로 `token`이나 `session`에는 `id` 속성이 없습니다. [TypeScript](https://authjs.dev/getting-started/typescript) 문서를 참고하여 추가하는 방법을 확인하세요.
  callbacks: {
    jwt({ token, user }) {
      if (user) { // 로그인 시 사용자 정보가 제공됨
        token.id = user.id
      }
      return token
    },
    session({ session, token }) {
      session.user.id = token.id
      return session
    },
  },
}

로그인 과정에서 jwt 콜백은 프로바이더로부터 전달된 사용자 프로필 정보를 제공합니다. 이를 활용해 JWT 토큰에 사용자 ID를 추가할 수 있습니다. 이후 이 API를 호출할 때마다 token.id를 통해 사용자 ID에 접근할 수 있습니다.

실제 세션에서 사용자 ID를 노출하려면 session 콜백에서 token.id에 접근한 후 session.user.id에 저장하면 됩니다.

이제 auth()useSession()을 호출할 때 사용자 ID에 접근할 수 있습니다.

데이터베이스 사용하기

데이터베이스 세션 전략을 사용 중이라면, session 콜백을 수정하여 사용자의 ID를 세션에 추가할 수 있습니다:

auth.ts
  // 기본적으로 `session`에는 `id` 속성이 없습니다. [TypeScript](https://authjs.dev/getting-started/typescript)를 참고하여 추가하는 방법을 확인하세요.
  callbacks: {
    session({ session, user }) {
      session.user.id = user.id
      return session
    },
  }
}

이렇게 하면 사용자의 ID가 세션 객체에 추가됩니다. 이 경우, token이 아닌 user 객체에서 ID를 가져오는 점에 주의하세요. 데이터베이스 세션 전략을 사용할 때, user 객체는 데이터베이스에서 가져온 사용자 정보이며, token은 존재하지 않습니다.

이제 auth() 또는 useSession()을 호출할 때 사용자의 ID에 접근할 수 있습니다.

⚠️

세션 객체는 서버 측에서 지속되지 않습니다. 데이터베이스 세션을 사용하더라도 세션 테이블에는 세션 토큰(ID), 사용자 정보, 만료 시간과 같은 데이터만 저장됩니다. 서버 측에서 세션 데이터를 지속적으로 유지하려면 다른 곳에 저장해야 합니다. session() 콜백에서 데이터베이스에 연결하여 이 정보를 가져올 수 있습니다.

프로바이더 함수 활용하기

기본 세션 데이터를 확장하는 방법 중 하나는 authorizeprofile 함수를 사용하는 것입니다. 이 함수들을 통해 필요한 속성을 가진 사용자 객체를 반환할 수 있습니다. 이 정보를 바탕으로 데이터베이스나 외부 API를 검색하는 로직을 만들 수 있습니다.

import Github from "next-auth/providers/github"
import Credentials from "next-auth/providers/credentials"
import type { Provider } from "next-auth/providers"
 
const providers: Provider[] = [
  Google({
    clientId: process.env.AUTH_GOOGLE_ID,
    clientSecret: process.env.AUTH_GOOGLE_SECRET,
    async profile(profile) {
      return { ...profile }
    },
  }),
  Credentials({
    async authorize(credentials) {
      return { ...credentials }
    },
  }),
]

리소스

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