Express 集成
将 Better Auth 集成到 Express 中。
本指南将向你展示如何将 Better Auth 集成到 express.js 中。
开始之前,确保你已经配置了 Better Auth 实例。如果还没有,请查看安装。
注意 CommonJS(cjs)不受支持。请通过 package.json 中设置 "type": "module" 或配置 tsconfig.json 使用 ES 模块来改用 ECMAScript 模块(ESM)。
挂载处理器
为了让 Better Auth 处理请求,我们需要将处理器挂载到一个 API 路由上。创建一个 catch-all 路由来管理所有对 /api/auth/* 的请求(ExpressJS v4)或 /api/auth/*splat 的请求(ExpressJS v5),或者使用你在 Better Auth 选项中指定的任意路径。
在诸如 express.json() 的请求体解析中间件之前挂载 Better Auth 处理器。请求体解析器会在将控制权传递给下一个处理器之前,消耗传入的请求流。
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
// Mount body-parsing middleware after the Better Auth handler.
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 的示例:
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);
});