Express 集成

本文将向你展示如何将Better Auth 与express.js集成。

在开始之前,请确保你已经配置了 Better Auth 实例。如果你尚未完成此操作,请查看安装指南

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

挂载处理程序

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

不要在 Better Auth 处理程序之前使用 express.json()。仅将其用于其他路由,否则客户端 API 将停留在"待处理"状态。

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