コンテンツへスキップ
NextAuth.js v4からの移行? 参照 移行ガイド.

Neo4jアダプター

リソース

設定

インストール

npm install @auth/neo4j-adapter neo4j-driver

環境変数

NEO4J_URI=bolt://#
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),
})

スキーマ

ノードラベル

以下のノードラベルが使用されます。

  • User
  • Account
  • Session
  • VerificationToken

リレーションシップ

以下のリレーションシップとリレーションシップラベルが使用されます。

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

プロパティ

このスキーマはNeo4jで使用するために適合されており、主要なモデルに基づいています。ノードプロパティについてはそちらを参照してください。リレーションシップにはプロパティがありません。

インデックス

最適なインデックスは、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 -2024