mcpField
T
tool-better-auth

tool-better-auth

github.com/heyvhuang安全33851 次安装30 周前更新
代码仓库

关于 tool-better-auth

Better Auth 集成指南面向在 TypeScript 项目中配置身份验证的开发者,整理配置、数据库、会话、安全、插件和客户端用法,并提示常见配置陷阱。

主要功能

  1. 01身份验证配置参考
  2. 02数据库适配器说明
  3. 03会话与 Cookie 缓存选项
  4. 04安全与速率限制设置
  5. 05插件和客户端用法

适用场景

  1. 01配置邮箱密码或社交登录
  2. 02设置会话存储与 Cookie
  3. 03接入身份验证插件
  4. 04排查 ORM 模型名配置问题

MCP 相关

指南列出 Better Auth CLI 的 `mcp --cursor` 命令,用于将 MCP 添加到 AI 工具。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/heyvhuang/ship-faster --skill tool-better-auth

安装后在 Claude Code 中输入/tool-better-auth确认已加载。

详细介绍

Better Auth 集成指南

请始终查阅 better-auth.com/docs,获取代码示例和最新 API。

Better Auth 是一个以 TypeScript 为先、与框架无关的身份验证框架,通过插件支持电子邮件/密码、OAuth、魔法链接、通行密钥等功能。


快速参考

环境变量
  • BETTER_AUTH_SECRET - 加密密钥(至少 32 个字符)。生成命令:openssl rand -base64 32
  • BETTER_AUTH_URL - 基础 URL(例如,https://example.com)

仅当未设置环境变量时,才在配置中定义 baseURL/secret。

文件位置

CLI 会在以下位置查找 auth.ts:./、./lib、./utils 或 ./src 下。自定义路径请使用 --config。

CLI 命令
  • npx @better-auth/cli@latest migrate - 应用架构(内置适配器)
  • npx @better-auth/cli@latest generate - 为 Prisma/Drizzle 生成架构
  • npx @better-auth/cli mcp --cursor - 将 MCP 添加到 AI 工具

添加或更改插件后,请重新运行。


核心配置选项

选项说明
appName可选的显示名称
baseURL仅当未设置 BETTER_AUTH_URL 时使用
basePath默认为 /api/auth。设置为 / 可使用根路径。
secret仅当未设置 BETTER_AUTH_SECRET 时使用
database大多数功能都需要。请参阅适配器文档。
secondaryStorage用于会话和速率限制的 Redis/KV
emailAndPassword设置 { enabled: true } 以启用
socialProviders{ google: { clientId, clientSecret }, ... }
plugins插件数组
trustedOriginsCSRF 白名单

数据库

**直接连接:**传入 pg.Pool、mysql2 连接池、better-sqlite3 或 bun:sqlite 实例。

**ORM 适配器:**从 better-auth/adapters/drizzle、better-auth/adapters/prisma、better-auth/adapters/mongodb 导入。

**重要:**Better Auth 使用适配器模型名称,而非底层表名称。如果 Prisma 模型是 User,映射到表 users,请使用 modelName: "user"(Prisma 引用),而不是 "users"。


会话管理

存储优先级:

  1. 如果定义了 secondaryStorage → 会话存储在其中(而非数据库)
  2. 设置 session.storeSessionInDatabase: true,也将会话持久化到数据库
  3. 没有数据库且使用 cookieCache → 完全无状态模式

Cookie 缓存策略:

  • compact(默认)- Base64url + HMAC。占用空间最小。
  • jwt - 标准 JWT。可读,但经过签名。
  • jwe - 已加密。安全性最高。

关键选项:session.expiresIn(默认 7 天)、session.updateAge(刷新间隔)、session.cookieCache.maxAge、session.cookieCache.version(更改后可使所有会话失效)。


用户与账户配置

用户:user.modelName、user.fields(列映射)、user.additionalFields、user.changeEmail.enabled(默认禁用)、user.deleteUser.enabled(默认禁用)。

账户:account.modelName、account.accountLinking.enabled、account.storeAccountCookie(用于无状态 OAuth)。

注册必需字段:email 和 name。


电子邮件流程

  • emailVerification.sendVerificationEmail - 必须定义,验证才能生效
  • emailVerification.sendOnSignUp / sendOnSignIn - 自动发送触发项
  • emailAndPassword.sendResetPassword - 密码重置电子邮件处理程序

安全

在 advanced 中:

  • useSecureCookies - 强制使用 HTTPS Cookie
  • disableCSRFCheck - ⚠️ 安全风险
  • disableOriginCheck - ⚠️ 安全风险
  • crossSubDomainCookies.enabled - 在子域之间共享 Cookie
  • ipAddress.ipAddressHeaders - 为代理设置自定义 IP 标头
  • database.generateId - 自定义 ID 生成,或设置为 "serial"/"uuid"/false

速率限制:rateLimit.enabled、rateLimit.window、rateLimit.max、rateLimit.storage("memory" | "database" | "secondary-storage")。


钩子

端点钩子: hooks.before / hooks.after - { matcher, handler } 数组。使用 createAuthMiddleware。可访问 ctx.path、ctx.context.returned(after)和 ctx.context.session。

数据库钩子: databaseHooks.user.create.before/after,session、account 也相同。适用于添加默认值或执行创建后的操作。

钩子上下文(ctx.context): session、secret、authCookies、password.hash()/verify()、adapter、internalAdapter、generateId()、tables、baseURL。


插件

从专用路径导入,以便进行 tree-shaking:

import { twoFactor } from "better-auth/plugins/two-factor"

不要使用 from "better-auth/plugins"。

常用插件: twoFactor、organization、passkey、magicLink、emailOtp、username、phoneNumber、admin、apiKey、bearer、jwt、multiSession、sso、oauthProvider、oidcProvider、openAPI、genericOAuth。

客户端插件应放在 createAuthClient({ plugins: [...] }) 中。


客户端

从以下路径导入:better-auth/client(原生)、better-auth/react、better-auth/vue、better-auth/svelte、better-auth/solid。

主要方法:signUp.email()、signIn.email()、signIn.social()、signOut()、useSession()、getSession()、revokeSession()、revokeSessions()。


类型安全

推断类型:typeof auth.$Infer.Session、typeof auth.$Infer.Session.user。

对于分离的客户端/服务端项目:createAuthClient<typeof auth>()。


常见注意事项

  1. 模型名与表名 - 配置使用 ORM 模型名,而非数据库表名
  2. 插件架构 - 添加插件后重新运行 CLI
  3. 二级存储 - 默认将会话存储在此处,而非数据库
  4. Cookie 缓存 - 自定义会话字段不会缓存,每次都会重新获取
  5. 无状态模式 - 无数据库时,会话仅存储在 Cookie 中,缓存过期时登出
  6. 更改邮箱流程 - 先发送至当前邮箱,再发送至新邮箱

资源

评论

支持 Markdown