API

当你创建一个新的 Better Auth 实例时,它会提供一个 api 对象。该对象暴露了你的 Better Auth 实例中存在的每个端点。你可以使用这个对象与 Better Auth 服务器端进行交互。

添加到 Better Auth 的任何端点,无论是来自插件还是核心功能,都可以通过 api 对象访问。

在服务器上调用 API 端点

要在服务器上调用 API 端点,请导入你的 auth 实例,并使用 api 对象调用端点。

server.ts
import { betterAuth } from "better-auth";
import { headers } from "next/headers";

export const auth = betterAuth({
    //...
})

// 在服务器上调用获取会话
await auth.api.getSession({
    headers: await headers() // 某些端点可能需要 headers
})

请求体、请求头和查询参数

与客户端不同,服务器需要将值作为对象传递,其中 body 键对应请求体,headers 对应请求头,query 对应查询参数。

server.ts
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 之上,这是一个微型 Web 框架,让你能够像调用常规函数一样调用 REST API 端点,并使我们能够轻松地从服务器推断客户端类型。

获取 headersResponse 对象

当你在服务器上调用 API 端点时,它会直接返回一个标准的 JavaScript 对象或数组,因为这只是一个常规的函数调用。

但有时你可能希望获取 headersResponse 对象。例如,如果你需要获取 cookies 或 headers。

获取 headers

要获取 headers,您可以将 returnHeaders 选项传递给端点。

const { headers, response } = await auth.api.signUpEmail({
	returnHeaders: true,
	body: {
		email: "john@doe.com",
		password: "password",
		name: "John Doe",
	},
});

headers 将是一个 Headers 对象。您可以使用它来获取 cookies 或 headers。

const cookies = headers.get("set-cookie");
const headers = headers.get("x-custom-header");

获取 Response 对象

要获取 Response 对象,您可以将 asResponse 选项传递给端点。

server.ts
const response = await auth.api.signInEmail({
    body: {
        email: "",
        password: ""
    },
    asResponse: true
})

错误处理

当您在服务器中调用 API 端点时,如果请求失败,它将抛出错误。您可以捕获错误并根据需要处理它。错误实例是 APIError 的实例。

server.ts
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)
    }
}

On this page