배포
넥스트인증을 배포하려면 몇 가지 단계만 수행하면 됩니다.
넥스트 애플리케이션이 실행 가능한 곳은 넥스트인증도 실행 가능합니다. 따라서 (데이터베이스 없이) JWT 세션 전략만 사용하는 기본 설정에서는 추가로 다음만 설정하면 됩니다.
넥스트인증 환경 변수
NEXTAUTH_SECRET
NEXTAUTH_URL
넥스트인증 API 경로와 설정 (
/pages/api/auth/[...nextauth].js
)- OAuth 제공자의
clientId
와clientSecret
- OAuth 제공자의
넥스트인증을 사용하여 최신 자바스크립트 앱을 배포하려면 환경 변수, 넥스트인증 API 경로, OAuth 제공자의 모든 설정(콜백 URL 등)이 올바른지 확인해야 합니다.
자세한 제공자 설정은 다음을 참고하세요.
베르셀
프로젝트 설정에서 베르셀 시스템 환경 변수를 설정해야 합니다.
모든 환경에 대한
NEXTAUTH_SECRET
환경 변수를 생성합니다.a.
openssl rand -base64 32
또는 https://generate-secret.vercel.app/32를 사용하여 임의의 값을 생성할 수 있습니다.b. 베르셀에는
NEXTAUTH_URL
환경 변수가 필요하지 않습니다.제공자의 클라이언트 ID와 클라이언트 암호를 환경 변수에 추가합니다. (OAuth 제공자를 사용하지 않는다면 이 단계를 건너뜀)
배포!
예시 저장소는 https://github.com/nextauthjs/next-auth-example을 확인하세요.
다음은 베르셀 배포에 대한 참고 사항입니다.
환경 변수는 서버 측에서 읽히므로 NEXT_PUBLIC_
접두사를 붙일 필요가 없습니다. 베르셀에 배포할 때는 NEXTAUTH_URL
환경 변수를 명시적으로 설정할 필요가 없습니다. 다른 제공자를 사용한다면 해당 환경 변수도 설정해야 합니다.
미리 보기 배포의 보안
(OAuth 제공자를 사용한) 미리 보기 배포를 보호하는 데는 몇 가지 중요한 어려움이 있습니다. 대부분의 OAuth 제공자는 단일 리디렉션 또는 콜백 URL만 허용하거나, 적어도 완전한 정적 URL 집합만 허용합니다. 즉, 사이트를 게시하기 전에 값을 설정할 수 없으며 OAuth 제공자의 콜백 URL 설정에서 와일드카드 하위 도메인을 사용할 수 없습니다.
여전히 넥스트인증을 사용하여 미리 보기 배포를 보호할 수 있는 방법을 알아보겠습니다.
자격 증명 제공자 사용하기
API 경로 /pages/api/auth/[...nextauth].js
와 설정 파일에서 현재 베르셀 미리 보기 환경에 있는지 확인합니다. 그리고 사용자 이름과 암호를 의미하는 간단한 자격 증명 제공자를 활성화합니다. 베르셀은 VERCEL_ENV
와 같이 확인 가능한 몇 가지 시스템 환경 변수를 제공합니다. 이를 사용하면 미리 보기 배포에서 해당 기본 인증 전략을 테스트용으로만 사용할 수 있습니다.
여기서 주의할 점은 다음과 같습니다.
- 잠재적인 테스트 전용 사용자가 중요한 데이터에 접근하지 못해야 합니다.
- 가능하면 미리 보기 배포를 프로덕션 데이터베이스에 연결하지 마세요.
예시:
js
import NextAuth from "next-auth"import GoogleProvider from "next-auth/providers/google"import CredentialsProvider from "next-auth/providers/credentials"export default NextAuth({providers: [process.env.VERCEL_ENV === "preview"? CredentialsProvider({name: "Credentials",credentials: {username: {label: "Username",type: "text",placeholder: "jsmith",},password: { label: "Password", type: "password" },},async authorize() {return {id: 1,name: "J Smith",email: "jsmith@example.com",image: "https://i.pravatar.cc/150?u=jsmith@example.com",}},}): GoogleProvider({clientId: process.env.GOOGLE_ID,clientSecret: process.env.GOOGLE_SECRET,}),],})
js
import NextAuth from "next-auth"import GoogleProvider from "next-auth/providers/google"import CredentialsProvider from "next-auth/providers/credentials"export default NextAuth({providers: [process.env.VERCEL_ENV === "preview"? CredentialsProvider({name: "Credentials",credentials: {username: {label: "Username",type: "text",placeholder: "jsmith",},password: { label: "Password", type: "password" },},async authorize() {return {id: 1,name: "J Smith",email: "jsmith@example.com",image: "https://i.pravatar.cc/150?u=jsmith@example.com",}},}): GoogleProvider({clientId: process.env.GOOGLE_ID,clientSecret: process.env.GOOGLE_SECRET,}),],})
분기 기반 미리 보기 URL 사용하기
베르셀의 미리 보기 배포는 종종 복수의 URL로 사용할 수 있습니다. 예를 들어 PR이 master
또는 main
으로 병합되면 커밋과 PR 관련 미리 보기 URL뿐만 아니라 분기별 미리 보기 URL도 사용할 수 있습니다. 이 분기별 URL은 동일한 분기에서 작업하는 한 절대로 변경되지 않습니다. 따라서 OAuth 제공자에 미리 보기 URL {project}-git-main-{user}.vercel.app
을 추가할 수 있습니다. 이 URL은 해당 분기에 대해 일정하게 유지되므로 인증 관련 배포를 테스트할 때 해당 미리 보기 배포와 URL을 재사용할 수 있습니다.