mcpField
B
better-auth-best-practices

better-auth-best-practices

github.com/panaversity安全44 次安装
代码仓库

关于 better-auth-best-practices

better-auth-best-practices 是面向 TypeScript 应用配置 Better Auth 的参考 skill,汇总安装、会话、数据库适配器、插件、客户端 API 和安全选项。

主要功能

  1. 01环境变量与 CLI 配置指引
  2. 02数据库适配器及模型名称说明
  3. 03会话存储与 Cookie 缓存选项
  4. 04插件和客户端 API 参考
  5. 05安全与速率限制设置

适用场景

  1. 01为 TypeScript 应用配置 Better Auth
  2. 02选择会话存储和 Cookie 策略
  3. 03添加插件并更新数据库 schema
  4. 04检查身份验证安全设置

MCP 相关

指南列出用于向 AI 工具添加 MCP 的 Better Auth CLI 命令,但未说明 MCP 服务或其向客户端开放的能力。

安装

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

$npx skills add https://github.com/panaversity/agentfactory --skill better-auth-best-practices

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

详细介绍

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