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({
//...
})
// calling get session on the server
await auth.api.getSession({
headers: await headers() // some endpoints might require headers
})Body、Headers、Query
与客户端不同,服务器端需要将值作为对象传递,其中 body 键用于请求体,headers 键用于标头,query 键用于查询参数。
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 端点,并使我们能够轻松从服务器端推断客户端类型。
获取 headers 和 Response 对象
当您在服务器端调用 API 端点时,它会直接返回标准的 JavaScript 对象或数组,因为它只是一个常规的函数调用。
但有时您可能希望获取 headers 或 Response 对象。例如,如果您需要获取 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 选项传递给端点。
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)
}
}