跳至內容
從 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 和團隊 -2024