MongoDB Adapter
리소스
설정
설치
npm install @auth/mongodb-adapter mongodb
환경 변수
MONGODB_URI=
설정
./auth.ts
import NextAuth from "next-auth"
import { MongoDBAdapter } from "@auth/mongodb-adapter"
import client from "./lib/db"
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: MongoDBAdapter(client),
providers: [],
})
MongoDB 어댑터는 연결을 자동으로 처리하지 않기 때문에, 어댑터에 이미 연결된 MongoClient
를 전달해야 합니다.
MongoDB 클라이언트 추가하기
lib/db.ts
// 이 접근 방식은 https://github.com/vercel/next.js/tree/canary/examples/with-mongodb에서 가져왔습니다.
import { MongoClient, ServerApiVersion } from "mongodb"
if (!process.env.MONGODB_URI) {
throw new Error('유효하지 않거나 누락된 환경 변수: "MONGODB_URI"')
}
const uri = process.env.MONGODB_URI
const options = {
serverApi: {
version: ServerApiVersion.v1,
strict: true,
deprecationErrors: true,
},
}
let client: MongoClient
if (process.env.NODE_ENV === "development") {
// 개발 모드에서는 전역 변수를 사용하여 HMR(Hot Module Replacement)로 인한 모듈 재로드 시에도 값을 유지합니다.
let globalWithMongo = global as typeof globalThis & {
_mongoClient?: MongoClient
}
if (!globalWithMongo._mongoClient) {
globalWithMongo._mongoClient = new MongoClient(uri, options)
}
client = globalWithMongo._mongoClient
} else {
// 프로덕션 모드에서는 전역 변수를 사용하지 않는 것이 좋습니다.
client = new MongoClient(uri, options)
}
// 모듈 범위의 MongoClient를 내보냅니다. 이를 별도의 모듈에서 수행함으로써 클라이언트를 여러 함수에서 공유할 수 있습니다.
export default client