EdgeDB 适配器
资源
设置
安装
npm install edgedb @auth/edgedb-adapter
npm install @edgedb/generate --save-dev
确保你已安装 EdgeDB CLI。按照下面的说明操作,或阅读EdgeDB 快速入门安装 EdgeDB CLI 并初始化项目
环境变量
AUTH_EDGEDB_DSN="edgedb://edgedb:[email protected]"
配置
./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: "[email protected]" },
}))
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:[email protected]: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"
},