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;
遷移
- 建立遷移
edgedb migration create
- 套用遷移
edgedb migrate
產生
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 實例
- AWS
- Google Cloud
- Azure
- DigitalOcean
- Fly.io
- Docker (與雲端無關)
尋找您的實例的 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"
},