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({
    //...
})

// calling get session on the server
await auth.api.getSession({
    headers: await headers() // some endpoints might require headers
})

Body、Headers、Query

与客户端不同,服务器端需要将值作为对象传递,其中 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() // optional but would be useful to get the user IP, user agent, etc.
})

await auth.api.verifyEmail({
    query: {
        token: "my_token"
    }
})

Better Auth API 端点基于 better-call 构建,这是一个微型 Web 框架,它允许您像调用常规函数一样调用 REST API 端点,并使我们能够轻松从服务器端推断客户端类型。

获取 headersResponse 对象

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

但有时您可能希望获取 headersResponse 对象。例如,如果您需要获取 cookie 或标头。

获取 headers

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

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

headers 将是一个 Headers 对象,您可以使用它来获取 cookie 或标头。

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