Nitro 集成
将 Better Auth 集成到 Nitro 中。
Better Auth 可以集成到你的 Nitro 应用程序(一个用于构建 Web 服务器的开源框架)中。
本指南旨在帮助你通过几个简单步骤,将 Better Auth 集成到你的 Nitro 应用中。
创建新的 Nitro 应用
首先使用以下命令来搭建一个新的 Nitro 应用:
npx create-nitro-app此命令将创建 nitro-app 目录并安装所有依赖。你现在可以在代码编辑器中打开 nitro-app 目录。
Prisma 适配器设置
本指南假设你对 Prisma 有基本的了解。如果你刚接触 Prisma,可以查看 Prisma 文档。
本指南中使用的 sqlite 数据库不适用于生产环境。你应当将其替换为适合生产的数据库,如 PostgreSQL。
本指南中,我们将使用 Prisma 适配器。你可以通过以下命令安装 Prisma 客户端:
npm install @prisma/clientprisma 可以作为开发依赖安装,命令如下:
npm install -D prisma通过运行以下命令生成 prisma 目录中的 schema.prisma 文件:
npx prisma init你现在可以用以下内容替换 schema.prisma 文件:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
// 将被删除,仅用于生成 prisma 客户端
model Test {
id Int @id @default(autoincrement())
name String
}确保在 .env 文件中更新 DATABASE_URL,指向你的数据库位置。
DATABASE_URL="file:./dev.db"运行以下命令生成 Prisma 客户端并同步数据库:
npx prisma db push安装及配置 Better Auth
按照 安装指南 中的第 1 和第 2 步,在你的 Nitro 应用中安装 Better Auth 并设置环境变量。
完成后,在 server/utils/auth.ts 文件中创建你的 Better Auth 实例。
import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export default betterAuth({
database: prismaAdapter(prisma, { provider: "sqlite" }),
emailAndPassword: { enabled: true },
});更新 Prisma Schema
使用 Better Auth CLI 通过以下命令更新你的 Prisma schema,添加所需模型:
npx auth generate --config server/utils/auth.ts--config 选项用于指定你创建 Better Auth 实例的文件路径。
然后前往 prisma/schema.prisma 文件并保存,以触发自动格式化。
保存后,你可以运行 npx prisma db push 命令更新数据库 schema。
挂载处理器
现在,你可以在 Nitro 应用中挂载 Better Auth 处理器。你可以将以下代码添加到 server/api/auth/[...all].ts 文件中:
import auth from "~/server/utils/auth";
export default auth;这是一个 catch-all 路由,将处理所有请求路径为 /api/auth/*。
CORS
你可以在 nitro.config.ts 中使用 路由规则 为 Nitro 应用配置 CORS:
import { defineConfig } from "nitro";
export default defineConfig({
routeRules: {
"/api/auth/**": {
cors: {
origin: ["http://localhost:3000"],
credentials: true,
},
},
},
});如果你使用基于 cookie 的会话,请设置 credentials: true,并在 origin 中列出前端的确切来源。通配符来源(cors: true)不能与凭据结合使用。如果你只使用 bearer token,则无需设置 credentials。请确保该配置与前端应用保持同步。
有关 CORS 的更多信息,请参阅 Nitro 文档。
认证守卫/中间件
你可以在 Nitro 应用中添加认证守卫以保护需要认证的路由。方法是创建新文件 server/utils/require-auth.ts,并添加以下代码:
import { defineHandler, HTTPError } from "nitro";
import auth from "~/server/utils/auth.ts";
/**
* Middleware for requiring authentication on routes.
*
* Can be extended to check specific roles or permissions.
*/
export default defineHandler(async (event) => {
const session = await auth.api.getSession({
headers: event.req.headers,
});
if (!session) {
throw HTTPError.status(401, "Unauthorized");
}
// You can save the session to the event context for later use
event.context.auth = session;
});
现在,你可以使用对象语法事件处理器将中间件应用于特定路由:
import { defineHandler } from "nitro";
import requireAuth from "~/server/utils/require-auth.ts";
export default defineHandler({
middleware: [requireAuth],
handler: () =>
Response.json(
{ message: "Secret data" },
{ status: 201, statusText: "Secret data" },
),
});