PostgreSQL Adapter
리소스
설정
설치
npm install @auth/pg-adapter pg
환경 변수
DATABASE_HOST=
DATABASE_NAME=
DATABASE_USER=
DATABASE_PASSWORD=
설정
./auth.ts
import NextAuth from "next-auth"
import PostgresAdapter from "@auth/pg-adapter"
import { Pool } from "pg"
const pool = new Pool({
host: process.env.DATABASE_HOST,
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME,
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
})
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: PostgresAdapter(pool),
providers: [],
})
Neon의 PostgreSQL을 Vercel Postgres처럼 사용한다면, @neondatabase/serverless
를 사용하여 edge 런타임에서 작업할 수 있습니다.
./auth.ts
import NextAuth from "next-auth"
import PostgresAdapter from "@auth/pg-adapter"
import { Pool } from "@neondatabase/serverless"
// 요청 핸들러 외부에서 `Pool`을 생성하지 마세요.
// Neon의 Postgres는 요청 간에 풀을 유지할 수 없습니다.
export const { handlers, auth, signIn, signOut } = NextAuth(() => {
// 요청 핸들러 내부에서 `Pool`을 생성합니다.
const pool = new Pool({ connectionString: process.env.DATABASE_URL })
return {
adapter: PostgresAdapter(pool),
providers: [],
}
})
스키마
이 어댑터에서 사용하는 테이블의 SQL 스키마는 다음과 같습니다. 더 자세한 내용은 데이터베이스 모델 문서 페이지에서 확인할 수 있습니다.
CREATE TABLE verification_token
(
identifier TEXT NOT NULL,
expires TIMESTAMPTZ NOT NULL,
token TEXT NOT NULL,
PRIMARY KEY (identifier, token)
);
CREATE TABLE accounts
(
id SERIAL,
"userId" INTEGER NOT NULL,
type VARCHAR(255) NOT NULL,
provider VARCHAR(255) NOT NULL,
"providerAccountId" VARCHAR(255) NOT NULL,
refresh_token TEXT,
access_token TEXT,
expires_at BIGINT,
id_token TEXT,
scope TEXT,
session_state TEXT,
token_type TEXT,
PRIMARY KEY (id)
);
CREATE TABLE sessions
(
id SERIAL,
"userId" INTEGER NOT NULL,
expires TIMESTAMPTZ NOT NULL,
"sessionToken" VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE users
(
id SERIAL,
name VARCHAR(255),
email VARCHAR(255),
"emailVerified" TIMESTAMPTZ,
image TEXT,
PRIMARY KEY (id)
);