Express 集成

本指南将展示如何将 Better Auth 与 express.js 集成。

在开始之前,请确保您已配置好 Better Auth 实例。如果尚未完成,请查看安装指南

请注意,不支持 CommonJS (cjs)。请通过设置 package.json 中的 "type": "module" 或配置 tsconfig.json 使用 ES 模块来使用 ECMAScript 模块 (ESM)。

挂载处理程序

为了让 Better Auth 能够处理请求,我们需要将处理程序挂载到一个 API 路由上。创建一个通配符路由,用于管理所有对 /api/auth/*(ExpressJS v4)或 /api/auth/*splat(ExpressJS v5)的请求(或您在 Better Auth 选项中指定的任何其他路径)。

不要在 Better Auth 处理程序之前使用 express.json()。请仅在其他路由中使用它,否则客户端 API 将卡在“pending”状态。

server.ts
import express from "express";
import { toNodeHandler } from "better-auth/node";
import { auth } from "./auth";

const app = express();
const port = 3005;

app.all("/api/auth/*", toNodeHandler(auth)); // 适用于 ExpressJS v4
// app.all("/api/auth/*splat", toNodeHandler(auth)); 适用于 ExpressJS v5 

// 在 Better Auth 处理程序之后挂载 express json 中间件
// 或仅将其应用于不与 Better Auth 交互的路由
app.use(express.json());

app.listen(port, () => {
	console.log(`示例应用正在监听端口 ${port}`);
});

完成设置后,启动您的服务器。Better Auth 将准备就绪。您可以向 /ok 端点(/api/auth/ok)发送 GET 请求来验证服务器是否正在运行。

跨域资源共享(CORS)配置

在集成 Better Auth 时为您的 Express 服务器添加 CORS(跨域资源共享)支持,您可以使用 cors 中间件。以下是更新后的示例,展示如何为服务器配置 CORS:

import express from "express";
import cors from "cors"; // 导入 CORS 中间件
import { toNodeHandler, fromNodeHeaders } from "better-auth/node";
import { auth } from "./auth";

const app = express();
const port = 3005;

// 配置 CORS 中间件
app.use(
  cors({
    origin: "http://your-frontend-domain.com", // 替换为您的前端域名
    methods: ["GET", "POST", "PUT", "DELETE"], // 指定允许的 HTTP 方法
    credentials: true, // 允许凭据(cookies、授权头等)
  })
);

获取用户会话

要获取用户的会话信息,您可以使用 auth 对象提供的 getSession 方法。该方法需要以特定格式传递请求头。为简化此过程,Better Auth 提供了 fromNodeHeaders 辅助函数,可将 Node.js 请求头转换为 Better Auth 期望的格式(即 Headers 对象)。

以下是在 Express 路由中使用 getSession 的示例:

server.ts
import { fromNodeHeaders } from "better-auth/node";
import { auth } from "./auth"; // 您的 Better Auth 实例

app.get("/api/me", async (req, res) => {
 	const session = await auth.api.getSession({
      headers: fromNodeHeaders(req.headers),
    });
	return res.json(session);
});

On this page