跳至内容
从 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:[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;

迁移

  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: "[email protected]" },
}))
 
return await query.run(client)

部署

部署 EdgeDB

首先在你首选的云提供商上部署一个 EdgeDB 实例

查找实例的 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"
},
Auth.js © Balázs Orbán 和团队 -2024