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

EdgeDB アダプター

リソース

セットアップ

インストール

npm install edgedb @auth/edgedb-adapter
npm install @edgedb/generate --save-dev

EdgeDB CLI がインストールされていることを確認してください。以下の手順に従うか、EdgeDB クイックスタートを読んで EdgeDB CLI をインストールし、プロジェクトを初期化してください。

環境変数

AUTH_EDGEDB_DSN="edgedb://edgedb:p4ssw0rd@10.0.0.1"

構成

./auth.ts
import NextAuth from "next-auth"
import { EdgeDBAdapter } from "@auth/edgedb-adapter"
import { createClient } from "edgedb"
 
const client = createClient({ dsn: process.env.AUTH_EDGEDB_DSN })
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: EdgeDBAdapter(client),
  providers: [],
})

EdgeDB CLI

Linux または macOS

curl --proto '=https' --tlsv1.2 -sSf https://sh.edgedb.com | sh

Windows

iwr https://ps1.edgedb.com -useb | iex

edgedb --version コマンドで CLI が利用可能であることを確認します。Command not found エラーが発生した場合は、edgedb コマンドが利用可能になる前に、新しいターミナルウィンドウを開く必要がある場合があります。

CLI がインストールされたら、アプリケーションのルートディレクトリからプロジェクトを初期化します。一連のプロンプトが表示されます。

edgedb project init

このプロセスでは、EdgeDB インスタンスを起動し、現在のディレクトリと「リンク」します。そのディレクトリ内にいる限り、CLI コマンドとクライアントライブラリは、追加の構成なしに、リンクされたインスタンスに自動的に接続できます。

スキーマ

dbschema/default.esdl に自動生成されたファイルの内容を以下で置き換えます。

default.esdl
module default {
    type User {
        property name -> str;
        required property email -> str {
            constraint exclusive;
        }
        property emailVerified -> datetime;
        property image -> str;
        multi link accounts := .<user[is Account];
        multi link sessions := .<user[is Session];
        property createdAt -> datetime {
            default := datetime_current();
        };
    }
 
    type Account {
       required property userId := .user.id;
       required property type -> str;
       required property provider -> str;
       required property providerAccountId -> str {
        constraint exclusive;
       };
       property refresh_token -> str;
       property access_token -> str;
       property expires_at -> int64;
       property token_type -> str;
       property scope -> str;
       property id_token -> str;
       property session_state -> str;
       required link user -> User {
            on target delete delete source;
       };
       property createdAt -> datetime {
            default := datetime_current();
        };
 
       constraint exclusive on ((.provider, .providerAccountId))
    }
 
    type Session {
        required property sessionToken -> str {
            constraint exclusive;
        }
        required property userId := .user.id;
        required property expires -> datetime;
        required link user -> User {
            on target delete delete source;
        };
        property createdAt -> datetime {
            default := datetime_current();
        };
    }
 
    type VerificationToken {
        required property identifier -> str;
        required property token -> str {
            constraint exclusive;
        }
        required property expires -> datetime;
        property createdAt -> datetime {
            default := datetime_current();
        };
 
        constraint exclusive on ((.identifier, .token))
    }
}
 
# Disable the application of access policies within access policies
# themselves. This behavior will become the default in EdgeDB 3.0.
# See: https://www.edgedb.com/docs/reference/ddl/access_policies#nonrecursive
using future nonrecursive_access_policies;

マイグレーション

  1. マイグレーションの作成
edgedb migration create
  1. マイグレーションの適用
edgedb migrate

EdgeDB マイグレーションの詳細については、マイグレーションのドキュメントをご覧ください。

生成

npx @edgedb/generate edgeql-js

これにより、クエリビルダーが生成され、コードファースト方式で TypeScript を使用して完全に型付けされた EdgeQL クエリを記述できるようになります。

const query = e.select(e.User, () => ({
  id: true,
  email: true,
  emailVerified: true,
  name: true,
  image: true,
  filter_single: { email: "johndoe@example.com" },
}))
 
return await query.run(client)

デプロイ

EdgeDB のデプロイ

まず、お好みのクラウドプロバイダーに EdgeDB インスタンスをデプロイします

インスタンスの DSN を見つける

DSN は接続文字列としても知られています。形式は edgedb://username:password@hostname:port になります。これに関する正確な手順は、デプロイ先のクラウドプロバイダーによって異なります。

環境変数の設定

.env
AUTH_EDGEDB_DSN=edgedb://johndoe:supersecure@myhost.com:420

マイグレーションの適用

DSN を使用して、リモートインスタンスに対してマイグレーションを適用します。

edgedb migrate --dsn <your-instance-dsn>

prebuild スクリプトのセットアップ

次の prebuild スクリプトを package.json に追加します。ホスティングプロバイダーがビルドを初期化すると、このスクリプトがトリガーされ、クエリビルダーが生成されます。npx @edgedb/generate edgeql-js コマンドは、EDGEDB_DSN 環境変数の値を読み取り、データベースに接続し、ホスティングプロバイダーがプロジェクトのビルドを開始する前にクエリビルダーを生成します。

package.json
"scripts": {
  "dev": "next dev",
  "build": "next build",
  "start": "next start",
  "lint": "next lint",
+  "prebuild": "npx @edgedb/generate edgeql-js"
},
Auth.js © Balázs Orbán and Team -2024