TanStack Start 集成

本集成指南假设您正在使用 TanStack Start。

在开始之前,请确保您已配置好 Better Auth 实例。如果尚未完成,请查看安装指南

挂载处理器

我们需要将处理器挂载到 TanStack API 端点/服务器路由。 创建一个新文件:/src/routes/api/auth/$.ts

src/routes/api/auth/$.ts
import { auth } from '@/lib/auth' // 导入您的 auth 实例
import { createServerFileRoute } from '@tanstack/react-start/server'

export const ServerRoute = createServerFileRoute('/api/auth/$').methods({
  GET: ({ request }) => {
    return auth.handler(request)
  },
  POST: ({ request }) => {
    return auth.handler(request)
  },
})

如果您尚未创建服务器路由处理器,可以通过创建以下文件来完成:/src/server.ts

src/server.ts
import {
  createStartHandler,
  defaultStreamHandler,
} from '@tanstack/react-start/server'
import { createRouter } from './router'

export default createStartHandler({
  createRouter,
})(defaultStreamHandler)

使用提示

  • 我们推荐使用客户端 SDK 或 authClient 来处理身份验证,而不是使用 auth.api 的服务器操作。
  • 当你调用需要设置 cookie 的函数(如 signInEmailsignUpEmail)时,需要为 TanStack Start 处理 cookie 的设置。Better Auth 提供了一个 reactStartCookies 插件来自动为你处理这一过程。
src/lib/auth.ts
import { betterAuth } from "better-auth";
import { reactStartCookies } from "better-auth/react-start";

export const auth = betterAuth({
    //...你的配置
    plugins: [reactStartCookies()] // 确保这是数组中的最后一个插件
})

现在,当你调用设置 cookie 的函数时,它们将自动使用 TanStack Start 的 cookie 处理系统进行设置。

import { auth } from "@/lib/auth"

const signIn = async () => {
    await auth.api.signInEmail({
        body: {
            email: "user@email.com",
            password: "password",
        }
    })
}

On this page