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() // 某些端点可能需要 headers
})
请求体、请求头和查询参数
与客户端不同,服务器需要将值作为对象传递,其中 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 之上,这是一个微型 Web 框架,让你能够像调用常规函数一样调用 REST API 端点,并使我们能够轻松地从服务器推断客户端类型。
获取 headers
和 Response
对象
当你在服务器上调用 API 端点时,它会直接返回一个标准的 JavaScript 对象或数组,因为这只是一个常规的函数调用。
但有时你可能希望获取 headers
或 Response
对象。例如,如果你需要获取 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
选项传递给端点。
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)
}
}