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”状态。
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
的示例:
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);
});