コンテンツにスキップ
NextAuth.js v4からの移行ですか? 移行ガイドをご覧ください.

Drizzle ORMアダプター

リソース

セットアップ

インストール

npm install drizzle-orm @auth/drizzle-adapter
npm install drizzle-kit --save-dev

環境変数

AUTH_DRIZZLE_URL=postgres://postgres:postgres@127.0.0.1:5432/db

設定

このアダプターを使用するには、プロジェクトでDrizzle ORMとDrizzle Kitをセットアップする必要があります。Drizzleはシンプルなクイックスタートガイドを提供しています。詳細については、それぞれのデータベース(PostgreSQLMySQL、またはSQLite)のDrizzleドキュメントに従ってください。要約すると、セットアップは以下のようになります。

  1. 以下のいずれかを基に、スキーマファイルを作成します。
  2. @libsql/clientmysql2postgresなど、サポートされているデータベースドライバーをプロジェクトにインストールします。
  3. drizzle.config.tsファイルを作成します。
  4. drizzle-kit generate:pgなどのコマンドを使用して、スキーマファイルから初期マイグレーションを生成します。
  5. migrate()関数を使用してマイグレーションを適用するか、drizzle-kit push:pgなどのコマンドを使用して変更をデータベースに直接プッシュします。
  6. スキーマがデフォルトのものと異なる場合は、アダプターの2番目のパラメーターとして渡します。

スキーマ

アダプターのセットアップ

./auth.ts
import NextAuth from "next-auth"
import { DrizzleAdapter } from "@auth/drizzle-adapter"
import { db } from "./schema.ts"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: DrizzleAdapter(db),
  providers: [],
})

独自のスキーマを渡す

独自のテーブルを使用する場合は、DrizzleAdapterに2番目の引数として渡すことができます。

  • sessionsTableはオプションで、データベースセッション戦略を使用している場合にのみ必要です。
  • verificationTokensTableはオプションで、マジックリンクプロバイダーを使用している場合にのみ必要です。
auth.ts
import NextAuth from "next-auth"
import Google from "next-auth/providers/google"
import { DrizzleAdapter } from "@auth/drizzle-adapter"
import { db, accounts, sessions, users, verificationTokens } from "./schema"
 
export const { handlers, auth } = NextAuth({
  adapter: DrizzleAdapter(db, {
    usersTable: users,
    accountsTable: accounts,
    sessionsTable: sessions,
    verificationTokensTable: verificationTokens,
  }),
  providers: [Google],
})

データベースの移行

スキーマがコードで記述されたので、データベースをスキーマに移行する必要があります。migrate.tsファイルの例は次のとおりです。詳細については、Drizzleの移行クイックスタートガイドをご覧ください。

migrate.ts
import "dotenv/config"
import { migrate } from "drizzle-orm/mysql2/migrator"
import { db, connection } from "./db"
 
// This will run migrations on the database, skipping the ones already applied
await migrate(db, { migrationsFolder: "./drizzle" })
 
// Don't forget to close the connection, otherwise the script will hang
await connection.end()

Drizzleでマイグレーションを管理する方法の完全なドキュメントは、Drizzle Kitのマイグレーションページにあります。