mcpField
B
better-auth

better-auth

github.com/oakoss安全20106 次安装11 周前更新
代码仓库

关于 better-auth

better-auth 是用于应用身份验证的库及配置技能资料,面向集成认证功能的开发者。它涵盖会话策略、数据库配置和插件,可组合密码、社交登录及多种认证方式。

主要功能

  1. 01密码与社交登录配置
  2. 02多种会话策略
  3. 03涵盖组织、二步验证等插件
  4. 04数据库适配器与配置指导
  5. 05迁移和故障排查参考

适用场景

  1. 01为应用配置密码或社交认证
  2. 02添加组织管理或二步验证
  3. 03排查会话、数据库或 OAuth 问题

安装

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

$npx skills add https://github.com/oakoss/agent-skills --skill better-auth

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
configuration.md
database-adapters.md
email-password.md
frameworks.md
migration-guides.md
organizations.md
plugins.md
sessions.md
troubleshooting.md
two-factor.md

详细介绍

better-auth

Package:[email protected](自 v1.4.0 起仅支持 ESM) 文档:https://better-auth.com/docs | GitHub:https://github.com/better-auth/better-auth

环境配置

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

只有在未设置环境变量时,才在配置中定义 baseURL/secret。CLI 会在以下位置查找 auth.ts:./、./lib、./utils 或 ./src。

核心配置选项

选项说明
appName可选的显示名称
baseURL仅在未设置 BETTER_AUTH_URL 时使用
basePath默认值为 /api/auth。设置为 / 可用于根路径。
secret仅在未设置 BETTER_AUTH_SECRET 时使用
database必需,除非使用无状态模式(v1.4+)
secondaryStorage用于会话和速率限制的 Redis/KV
emailAndPassword设置为 { enabled: true } 以启用
socialProviders{ google: { clientId, clientSecret }, ... }
plugins插件数组
trustedOriginsCSRF 允许列表

插件参考

插件描述
twoFactorTOTP、电子邮件 OTP、备用代码
organization多租户组织、团队、邀请、RBAC
admin用户管理、模拟用户、封禁
passkey基于 WebAuthn 的无密码登录
magicLink基于电子邮件的无密码登录
jwt支持密钥轮换和 JWKS 的 JWT 令牌
oauthProvider构建自己的 OAuth 2.1 提供方(独立的 @better-auth/oauth-provider 软件包)
sso企业 SSO,支持 OIDC、OAuth2、SAML 2.0(独立的 @better-auth/sso 软件包)
scim企业用户配置(独立的 @better-auth/scim 软件包)
stripe支付和订阅管理
bearer面向移动端/CLI 的 API 令牌身份验证
apiKey支持速率限制的基于令牌的身份验证
oneTapGoogle One Tap 便捷登录
anonymous无需个人身份信息的访客用户访问
genericOAuth支持 PKCE 的自定义 OAuth 提供方
emailOTP基于电子邮件的一次性密码身份验证
phoneNumber基于电话/SMS 的 OTP 登录
username基于用户名的登录(电子邮件登录的替代方式)
multiSession在同一浏览器中使用多个账户
openAPI位于 /api/auth/reference 的交互式 API 文档

会话策略

策略格式使用场景
紧凑型(默认)Base64url + HMAC-SHA256体积最小、速度最快
JWT标准 JWT可互操作
JWEA256CBC-HS512 加密安全性最高

快速开始

对于新项目或首次设置 Better Auth,请使用官方交互式设置技能:

npx skills add better-auth/skills -s create-auth-skill

此技能会引导你完成框架检测、数据库选择、身份验证方式选择、插件设置,并生成初始配置。

反模式

反模式正确做法
使用 d1Adapter使用 provider: "sqlite" 的 Drizzle 或 Kysely 适配器
在配置中使用表名使用 ORM 模型名,而非数据库表名
更改插件后忘记运行 CLI重新运行 npx @better-auth/cli@latest generate
未将 tanstackStartCookies() 设为最后一个插件它必须是数组中的最后一个插件(TanStack Start)
通过 session 检查登录状态检查 session?.user —— session 对象始终为真值
缺少 nodejs_compat 标志Cloudflare Workers 的 wrangler.toml 中必须设置
在身份验证中使用 Kysely CamelCasePlugin使用不带该插件的独立 Kysely 实例
使用旧的 reactStartCookies 导入在 v1.4.14 中,已从 better-auth/tanstack-start 将其重命名为 tanstackStartCookies

常见错误

错误正确做法
环境变量已设置时仍在配置中设置 baseURL 和 secret仅当未设置 BETTER_AUTH_URL 和 BETTER_AUTH_SECRET 环境变量时,才在配置中定义这些值
在 better-auth v1.4+ 中使用 CommonJS require 语法better-auth 自 v1.4.0 起仅支持 ESM;只能使用 import 语法
添加或更改插件后未重新运行 CLI generate更改插件后,务必运行 npx @better-auth/cli@latest generate 以更新数据库架构
通过检查 session 对象是否为真值来检测登录状态改为检查 session?.user;session 对象本身始终为真值
在 Cloudflare D1 中直接使用 d1Adapter为兼容 D1,请使用 provider: "sqlite" 的 Drizzle 或 Kysely 适配器

破坏性变更

版本变更
v1.4.14reactStartCookies 重命名为 tanstackStartCookies(从 better-auth/tanstack-start 导入)
v1.4.6allowImpersonatingAdmins 默认值为 false
v1.4.0仅支持 ESM(不支持 CommonJS);SSO、SCIM、OAuth Provider 已移至独立软件包
v1.3.0多团队表结构:需要新增 teamMembers 表

委派

处理身份验证时,请委派给:

  • application-security — 安全架构和威胁建模
  • database — Drizzle ORM 架构和迁移
  • tanstack-start — TanStack Start 集成模式

资源

参考资料

  • 数据库适配器 — Drizzle、Kysely、Prisma 适配器、Cloudflare Workers 工厂模式
  • 会话管理 — Cookie 缓存、无状态会话、存储优先级、freshAge 限制
  • 插件和社交身份验证 — 插件设置、OAuth 2.1 提供方、管理员 RBAC、社交提供方权限范围
  • 电子邮件和密码 — 验证、密码重置、计时攻击防护、哈希(scrypt、argon2)、令牌安全
  • 双重身份验证 — TOTP、电子邮件/SMS OTP、备用代码、受信任设备、2FA 会话流程
  • 组织 — 多租户组织、团队、邀请、RBAC、动态访问控制、生命周期钩子
  • 配置 — 用户/账户配置、速率限制、钩子、CSRF、受信任来源、Cookie/OAuth 安全、生产环境检查清单
  • 框架集成 — TanStack Start 设置、Expo/React Native、客户端导入、类型安全
  • 迁移指南 — 使用架构映射和会话策略,从 NextAuth/Auth.js、Clerk 或 Supabase Auth 迁移
  • 故障排除 — D1 一致性、CORS、OAuth 重定向、管理员 403、nanostore 刷新、已知问题

评论

支持 Markdown