Prisma

将 Better Auth 与 Prisma 集成。

Prisma ORM 是一个开源的数据库工具包,通过提供类型安全的查询构建器和直观的数据建模界面,简化了应用程序中的数据库访问和管理。

有关 Prisma ORM 的介绍,请参阅 Prisma 入门

本指南使用 Prisma 7 和 PostgreSQL。如果您使用的是 Prisma 6 或更早版本,驱动适配器是可选的,您现有的 Prisma Client 设置可以保持不变。

安装

要使用 Prisma 适配器,请安装 @better-auth/prisma-adapter

npm install @better-auth/prisma-adapter

以下示例使用 Prisma 7 和 PostgreSQL。如果尚未配置 Prisma,请先按照 Prisma 的 PostgreSQL 快速入门 进行操作,然后再继续。

设置

以下示例使用下列项目结构:

.env
prisma.config.ts
schema.prisma
client.ts
prisma.ts
auth.ts

配置 Prisma

如果您要开始一个新的 Prisma 项目,请使用 PostgreSQL 和显式的 Prisma Client 输出路径进行初始化:

Initialize Prisma
npx prisma init --datasource-provider postgresql --output ../src/generated/prisma

这会创建 prisma/schema.prismaprisma.config.ts.env。在 .env 中将 DATABASE_URL 设置为您的 PostgreSQL 连接字符串。

如果项目中已经配置了 Prisma,请保留现有的数据源和输出路径,并跳过此初始化命令。

配置输出路径后生成 Prisma Client:

Generate Prisma Client
npx prisma generate

创建 Prisma Client

从 Prisma 模式中配置的输出路径导入 PrismaClient,并将 PostgreSQL 驱动适配器传递给它:

src/lib/prisma.ts
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "../generated/prisma/client";

const databaseUrl = process.env.DATABASE_URL;

if (!databaseUrl) {
  throw new Error("DATABASE_URL is not set");
}

const adapter = new PrismaPg({
  connectionString: databaseUrl,
});

export const prisma = new PrismaClient({ adapter });

创建一个 PrismaClient 实例,并在整个应用程序中重复使用它。 启用热重载的框架或无服务器运行时可能需要特定于框架的生命周期模式。

配置 Better Auth

将 Prisma Client 实例传递给 Better Auth Prisma 适配器:

src/lib/auth.ts
import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
import { prisma } from "./prisma";

export const auth = betterAuth({
  database: prismaAdapter(prisma, {
    provider: "postgresql",
  }),
});

模式生成与迁移

Better Auth CLI 会生成 Better Auth 配置和插件所需的 Prisma 模式。使用 Prisma CLI 根据生成的模式创建并应用迁移。

Prisma 模式生成

Prisma 模式迁移

✅ 支持❌ 不支持
模式生成
npx auth@latest generate

Better Auth CLI 会更新您的 Prisma 模式,但不会应用迁移。 使用 Prisma 创建数据库迁移,然后重新生成 Prisma Client:

Terminal
npx prisma migrate dev --name add-better-auth
npx prisma generate

Joins

数据库连接在 Better Auth 需要在单个查询中从多个表获取相关数据时非常有用。 /get-session/get-full-organization 以及许多其他端点都能从此功能中大幅受益, 根据数据库延迟的不同,性能提升可达到 2 到 3 倍以上。

Prisma 适配器自 1.4.0 版本起开箱即用地支持连接。 要启用此功能,请在您的身份验证配置中将 advanced.database.joins 设置为 true

auth.ts
import { betterAuth } from "better-auth";

export const auth = betterAuth({
  advanced: {
    database: {
      joins: true,
    },
  },
});

请确保您的 Prisma 模式中已定义必要的关联关系。 如果在您的 Prisma 模式中看不到任何关联关系,您可以使用 @relation 指令手动添加, 或运行我们最新的 CLI 版本 npx auth@latest generate 来生成带有关联的 Prisma 模式。

其他信息