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

Credentials Provider

Credentials Provider는 사용자 이름과 비밀번호, 도메인, 2단계 인증, 하드웨어 장치(예: YubiKey U2F/FIDO)와 같은 임의의 자격 증명을 사용하여 로그인을 처리할 수 있게 해줍니다.

이 기능은 기존 시스템에 대해 사용자를 인증해야 하는 경우를 지원하기 위해 설계되었습니다. 따라서 이 방식으로 인증된 사용자는 데이터베이스에 저장되지 않습니다.

리소스

설정

/auth.ts
import NextAuth from "next-auth"
import Credentials from "next-auth/providers/credentials"
 
export const { signIn, signOut, auth } = NextAuth({
  providers: [
    Credentials({
      credentials: {
        username: { label: "Username" },
        password: { label: "Password", type: "password" },
      },
      async authorize({ request }) {
        const response = await fetch(request)
        if (!response.ok) return null
        return (await response.json()) ?? null
      },
    }),
  ],
})

커스텀 에러 메시지

authorize 함수에서 커스텀 에러를 던져 사용자에게 커스텀 에러 메시지를 반환할 수 있습니다.

@/auth.ts
import NextAuth, { CredentialsSignin } from "next-auth"
import Credentials from "next-auth/providers/credentials"
 
class InvalidLoginError extends CredentialsSignin {
  code = "Invalid identifier or password"
}
 
export const { handlers, auth } = NextAuth({
  providers: [
    Credentials({
      credentials: {
        username: { label: "Username" },
        password: { label: "Password", type: "password" },
      },
      async authorize(credentials) {
        throw new InvalidLoginError()
      },
    }),
  ],
})

로그인 시도가 실패한 후 사용자가 리다이렉트되는 로그인 페이지의 쿼리 파라미터에서 이 커스텀 에러 코드를 확인할 수 있습니다. 예를 들어 https://app.company.com/auth/signin?error=CredentialsSignin&code=Invalid+identifier+or+password와 같은 형태로 나타납니다.

⚠️

OAuth 프로바이더들은 다음과 같은 기능을 구축하기 위해 상당한 비용, 시간, 엔지니어링 노력을 투자합니다:

  • 남용 탐지 (봇 방어, 요청 제한)
  • 비밀번호 관리 (비밀번호 재설정, 크리덴셜 스터핑 방지, 주기적 변경)
  • 데이터 보안 (암호화/솔팅, 강도 검증)

그 외에도 인증 솔루션을 위해 다양한 기능을 제공합니다. 이러한 검증된 솔루션을 활용하는 것이 처음부터 다시 구축하는 것보다 여러분의 애플리케이션에 더 유리할 수 있습니다.

그럼에도 불구하고 비밀번호 기반 인증을 구축하고 싶다면, Auth.js는 이를 완전히 제어할 수 있는 기능을 제공합니다.

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