본문으로 건너뛰기

자격 증명

방법

자격 증명 제공자를 사용하면 사용자 이름과 비밀번호, 이중 인증(2FA), 하드웨어 장치(예: YubiKey U2F / FIDO)와 같은 임의 자격 증명으로 로그인을 처리할 수 있습니다.

사용자를 인증해야 하는 기존 시스템이 있는 경우를 지원합니다.

pages/api/auth/[...nextauth].js
js
import CredentialsProvider from "next-auth/providers/credentials"
...
providers: [
CredentialsProvider({
// 로그인 양식에 표시할 이름 (예: '...로 로그인')
name: 'Credentials',
// 자격 증명은 로그인 페이지에서 적절한 양식을 생성하는 데 사용됩니다.
// 제출할 것으로 예상되는 필드를 지정할 수 있습니다.
// 예: 도메인, 사용자 이름, 비밀번호, 2FA 토큰 등
// 객체를 통해 HTML 속성을 <input> 태그로 전달할 수 있습니다.
credentials: {
username: { label: "Username", type: "text", placeholder: "jsmith" },
password: { label: "Password", type: "password" }
},
async authorize(credentials, req) {
// 제출된 자격 증명을 사용해 사용자를 나타내는 객체를 반환하거나
// 자격 증명이 유효하지 않다면 false/null 값을 반환하는
// 자체 논리를 이곳에 작성해야 합니다.
// 예시: `return { id: '1', name: 'J Smith', email: 'jsmith@example.com' }`
// req 객체를 사용해 추가 매개변수를 얻을 수도 있습니다.
// 예시: 요청 IP 주소
const res = await fetch("/your/endpoint", {
method: 'POST',
body: JSON.stringify(credentials),
headers: { "Content-Type": "application/json" }
})
const user = await res.json()
// 오류가 없고 사용자 데이터가 있으면 user를 반환합니다.
if (res.ok && user) {
return user
}
// 사용자 데이터가 검색되지 않으면 null을 반환합니다.
return null
}
})
]
...
pages/api/auth/[...nextauth].js
js
import CredentialsProvider from "next-auth/providers/credentials"
...
providers: [
CredentialsProvider({
// 로그인 양식에 표시할 이름 (예: '...로 로그인')
name: 'Credentials',
// 자격 증명은 로그인 페이지에서 적절한 양식을 생성하는 데 사용됩니다.
// 제출할 것으로 예상되는 필드를 지정할 수 있습니다.
// 예: 도메인, 사용자 이름, 비밀번호, 2FA 토큰 등
// 객체를 통해 HTML 속성을 <input> 태그로 전달할 수 있습니다.
credentials: {
username: { label: "Username", type: "text", placeholder: "jsmith" },
password: { label: "Password", type: "password" }
},
async authorize(credentials, req) {
// 제출된 자격 증명을 사용해 사용자를 나타내는 객체를 반환하거나
// 자격 증명이 유효하지 않다면 false/null 값을 반환하는
// 자체 논리를 이곳에 작성해야 합니다.
// 예시: `return { id: '1', name: 'J Smith', email: 'jsmith@example.com' }`
// req 객체를 사용해 추가 매개변수를 얻을 수도 있습니다.
// 예시: 요청 IP 주소
const res = await fetch("/your/endpoint", {
method: 'POST',
body: JSON.stringify(credentials),
headers: { "Content-Type": "application/json" }
})
const user = await res.json()
// 오류가 없고 사용자 데이터가 있으면 user를 반환합니다.
if (res.ok && user) {
return user
}
// 사용자 데이터가 검색되지 않으면 null을 반환합니다.
return null
}
})
]
...

자세한 내용은 자격 증명 제공자 문서을 참조하세요.

참고

자격 증명 제공자는 세션에 대해 JSON 웹 토큰이 활성화된 경우에만 사용할 수 있습니다. 자격 증명 제공자로 인증된 사용자는 데이터베이스에 저장되지 않습니다.

옵션

이름설명타입필수
id제공자의 고유 IDstring
name제공자를 설명하는 이름string
type제공자의 유형으로 이 경우에는 credentials"credentials"
credentials로그인할 자격 증명Object
authorize사용자에게 권한이 부여되면 실행할 콜백(credentials, req) => Promise<User>