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가 "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(`Example app listening on port ${port}`);
});

설정을 완료한 후 서버를 시작하세요. Better Auth를 사용할 준비가 됩니다. /ok 엔드포인트(/api/auth/ok)로 GET 요청을 보내 서버가 실행 중인지 확인할 수 있습니다.

CORS 구성

Better Auth를 통합할 때 Express 서버에 CORS(Cross-Origin Resource Sharing) 지원을 추가하려면, 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, // 자격 증명(쿠키, 인증 헤더 등) 허용
  })
);

사용자 세션 가져오기

사용자의 세션을 검색하려면, auth 객체에서 제공하는 getSession 메서드를 사용할 수 있습니다. 이 메서드는 특정 형식으로 요청 헤더를 전달해야 합니다. 이 프로세스를 단순화하기 위해, Better Auth는 Node.js 요청 헤더를 Better Auth가 예상하는 형식(Headers 객체)으로 변환하는 fromNodeHeaders 헬퍼 함수를 제공합니다.

다음은 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