API
Better Auth 인스턴스를 생성하면 api 객체가 제공됩니다. 이 객체는 Better Auth 인스턴스에 존재하는 모든 엔드포인트를 노출합니다. 이를 사용하여 서버 측에서 Better Auth와 상호작용할 수 있습니다.
플러그인이나 코어에서 Better Auth에 추가된 모든 엔드포인트는 api 객체를 통해 액세스할 수 있습니다.
서버에서 API 엔드포인트 호출하기
서버에서 API 엔드포인트를 호출하려면 auth 인스턴스를 가져와서 api 객체를 사용하여 엔드포인트를 호출하면 됩니다.
import { betterAuth } from "better-auth";
import { headers } from "next/headers";
export const auth = betterAuth({
//...
})
// 서버에서 세션 가져오기
await auth.api.getSession({
headers: await headers() // 일부 엔드포인트는 헤더가 필요할 수 있습니다
})Body, Headers, Query
클라이언트와 달리 서버에서는 값을 객체로 전달해야 하며, body는 body 키로, 헤더는 headers 키로, 쿼리 파라미터는 query 키로 전달해야 합니다.
await auth.api.getSession({
headers: await headers()
})
await auth.api.signInEmail({
body: {
email: "john@doe.com",
password: "password"
},
headers: await headers() // 선택사항이지만 사용자 IP, 사용자 에이전트 등을 가져오는 데 유용합니다
})
await auth.api.verifyEmail({
query: {
token: "my_token"
}
})Better Auth API 엔드포인트는 better-call 위에 구축되어 있습니다. better-call은 REST API 엔드포인트를 일반 함수처럼 호출할 수 있게 해주는 작은 웹 프레임워크로, 서버에서 클라이언트 타입을 쉽게 추론할 수 있게 해줍니다.
headers와 Response 객체 가져오기
서버에서 API 엔드포인트를 호출하면 일반 함수 호출이므로 표준 JavaScript 객체나 배열을 직접 반환합니다.
하지만 headers나 Response 객체를 가져와야 하는 경우도 있습니다. 예를 들어 쿠키나 헤더를 가져와야 하는 경우입니다.
headers 가져오기
headers를 가져오려면 엔드포인트에 returnHeaders 옵션을 전달하면 됩니다.
const { headers, response } = await auth.api.signUpEmail({
returnHeaders: true,
body: {
email: "john@doe.com",
password: "password",
name: "John Doe",
},
});headers는 Headers 객체가 되며, 이를 사용하여 쿠키나 헤더를 가져올 수 있습니다.
const cookies = headers.get("set-cookie");
const headers = headers.get("x-custom-header");Response 객체 가져오기
Response 객체를 가져오려면 엔드포인트에 asResponse 옵션을 전달하면 됩니다.
const response = await auth.api.signInEmail({
body: {
email: "",
password: ""
},
asResponse: true
})에러 처리
서버에서 API 엔드포인트를 호출할 때 요청이 실패하면 에러가 발생합니다. 에러를 캐치하여 적절하게 처리할 수 있습니다. 에러 인스턴스는 APIError의 인스턴스입니다.
import { APIError } from "better-auth/api";
try {
await auth.api.signInEmail({
body: {
email: "",
password: ""
}
})
} catch (error) {
if (error instanceof APIError) {
console.log(error.message, error.status)
}
}