TanStack Start 集成

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

在开始之前,请确保您已配置 Better Auth 实例。如果您尚未这样做,请查看 installation

挂载处理程序

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

src/routes/api/auth/$.ts
import { auth } from '@/lib/auth' // import your auth instance
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({
    //...your config
    plugins: [reactStartCookies()] // make sure this is the last plugin in the array
})

现在,当您调用设置 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