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의 버전(커뮤니티 또는 엔터프라이즈)과 노드에 추가 데이터가 있는지 여부에 따라 달라집니다. 아래는 기본적으로 권장하는 인덱스입니다.
- 커뮤니티 에디션과 엔터프라이즈 에디션 모두에 대해 제약 조건과 인덱스를 생성합니다.
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);