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

Neo4j Adapter

리소스

설정

설치

npm install @auth/neo4j-adapter neo4j-driver

환경 변수

NEO4J_URI=bolt://localhost
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=abc

설정

./auth.ts
import NextAuth from "next-auth"
import neo4j from "neo4j-driver"
import { Neo4jAdapter } from "@auth/neo4j-adapter"
 
const driver = neo4j.driver(
  process.env.NEO4J_URI,
  neo4j.auth.basic(process.env.NEO4J_USERNAME, process.env.NEO4J_PASSWORD)
)
 
const neo4jSession = driver.session()
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [],
  adapter: Neo4jAdapter(neo4jSession),
})

Schema

노드 레이블

다음 노드 레이블이 사용됩니다.

  • User
  • Account
  • Session
  • VerificationToken

관계

다음과 같은 관계와 관계 레이블이 사용됩니다.

  • (:User)-[:HAS_ACCOUNT]->(:Account)
  • (:User)-[:HAS_SESSION]->(:Session)

속성

이 스키마는 Neo4j에서 사용할 수 있도록 조정되었으며, 주요 모델을 기반으로 합니다. 노드 속성에 대해서는 해당 링크를 확인해 주세요. 관계(relationships)에는 속성이 없습니다.

인덱스

최적의 인덱스는 Neo4j의 버전(커뮤니티 또는 엔터프라이즈)과 노드에 추가 데이터가 있는지 여부에 따라 달라집니다. 아래는 기본적으로 권장하는 인덱스입니다.

  1. 커뮤니티 에디션엔터프라이즈 에디션 모두에 대해 제약 조건과 인덱스를 생성합니다.
CREATE CONSTRAINT user_id_constraint IF NOT EXISTS
ON (u:User) ASSERT u.id IS UNIQUE;
 
CREATE INDEX user_id_index IF NOT EXISTS
FOR (u:User) ON (u.id);
 
CREATE INDEX user_email_index IF NOT EXISTS
FOR (u:User) ON (u.email);
 
CREATE CONSTRAINT session_session_token_constraint IF NOT EXISTS
ON (s:Session) ASSERT s.sessionToken IS UNIQUE;
 
CREATE INDEX session_session_token_index IF NOT EXISTS
FOR (s:Session) ON (s.sessionToken);

2a. 커뮤니티 에디션에만 단일 속성 인덱스를 생성합니다.

CREATE INDEX account_provider_index IF NOT EXISTS
FOR (a:Account) ON (a.provider);
 
CREATE INDEX account_provider_account_id_index IF NOT EXISTS
FOR (a:Account) ON (a.providerAccountId);
 
CREATE INDEX verification_token_identifier_index IF NOT EXISTS
FOR (v:VerificationToken) ON (v.identifier);
 
CREATE INDEX verification_token_token_index IF NOT EXISTS
FOR (v:VerificationToken) ON (v.token);

2b. 엔터프라이즈 에디션에만 복합 노드 키 제약 조건과 인덱스를 생성합니다.

CREATE CONSTRAINT account_provider_composite_constraint IF NOT EXISTS
ON (a:Account) ASSERT (a.provider, a.providerAccountId) IS NODE KEY;
 
CREATE INDEX account_provider_composite_index IF NOT EXISTS
FOR (a:Account) ON (a.provider, a.providerAccountId);
 
CREATE CONSTRAINT verification_token_composite_constraint IF NOT EXISTS
ON (v:VerificationToken) ASSERT (v.identifier, v.token) IS NODE KEY;
 
CREATE INDEX verification_token_composite_index IF NOT EXISTS
FOR (v:VerificationToken) ON (v.identifier, v.token);
Auth.js © Balázs Orbán and Team - 2025