Skip to content
create-auth-skill logo

Create Auth Skill

create-auth-skill

使用 Better Auth 为 TypeScript/JavaScript 应用创建鉴权层的技能。

SKILL.md

Full skill instructions

Create Auth Skill

使用 Better Auth 为 TypeScript/​JavaScript 应用添加鉴权的指南。

代码示例与语法参见 better-auth.com/​docs。


决策树

是否为新项目/空项目?
├─ 是 → 新项目搭建
│ 1. 确定框架
│ 2. 选择数据库
│ 3. 安装 better-auth
│ 4. 创建 auth.ts + auth-client.ts
│ 5. 配置路由处理器
│ 6. 运行 CLI migrate/​generate
│ 7. 通过插件添加能力
│
└─ 否 → 项目是否已有鉴权?
 ├─ 是 → 迁移/增强
 │ • 审计现有鉴权缺口
 │ • 规划渐进式迁移
 │ • 参考文档中的迁移指南
 │
 └─ 否 → 为现有项目添加鉴权
 1. 分析项目结构
 2. 安装 better-auth
 3. 创建 auth 配置
 4. 添加路由处理器
 5. 运行 schema 迁移
 6. 接入现有页面

安装

核心: npm install better-auth

按需安装的作用域包:

包用途
@better-auth/​passkeyWebAuthn/​Passkey 鉴权
@better-auth/​ssoSAML/​OIDC 企业 SSO
@better-auth/​stripeStripe 支付
@better-auth/​scimSCIM 用户配置
@better-auth/​expoReact Native/​Expo

环境变量

BETTER_AUTH_SECRET=<32+ 字符,可用 openssl rand -base64 32 生成>
BETTER_AUTH_URL=http://localhost:3000
DATABASE_URL= 

按需添加 OAuth 密钥:GITHUB_CLIENT_ID、GITHUB_CLIENT_SECRET、GOOGLE_CLIENT_ID 等。


服务端配置(auth.ts)

位置: lib/​auth.ts 或 src/​lib/​auth.ts

最小配置需包含:

  • database - 连接或适配器
  • emailAndPassword: { enabled: true } - 邮箱/密码鉴权

标准配置可增加:

  • socialProviders - OAuth 提供方(google、github 等)
  • emailVerification.sendVerificationEmail - 验证邮件发送
  • emailAndPassword.sendResetPassword - 重置密码发送

完整配置可增加:

  • plugins - 功能插件数组
  • session - 过期、cookie 缓存等
  • account.accountLinking - 多提供方账号关联
  • rateLimit - 限流配置

导出类型: export type Session = typeof auth.$Infer.Session


客户端配置(auth-client.ts)

按框架导入:

框架导入
React/​Next.jsbetter-auth/​react
Vuebetter-auth/​vue
Sveltebetter-auth/​svelte
Solidbetter-auth/​solid
Vanilla JSbetter-auth/​client

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

常用导出: signIn、signUp、signOut、useSession、getSession


路由处理器配置

框架文件处理器
Next.js App Routerapp/​api/​auth/[...all]/​route.tstoNextJsHandler(auth) → 导出 { GET, POST }
Next.js Pagespages/​api/​auth/[...all].tstoNextJsHandler(auth) → 默认导出
Express任意文件app.all("/​api/​auth/​*", toNodeHandler(auth))
SvelteKitsrc/​hooks.server.tssvelteKitHandler(auth)
SolidStart路由文件solidStartHandler(auth)
Hono路由文件auth.handler(c.req.raw)

Next.js Server Components: 在 auth 配置中添加 nextCookies() 插件。


数据库迁移

适配器命令
内置 Kyselynpx @better-auth/​cli@latest migrate(直接应用)
Prismanpx @better-auth/​cli@latest generate --output prisma/​schema.prisma 然后 npx prisma migrate dev
Drizzlenpx @better-auth/​cli@latest generate --output src/​db/​auth-schema.ts 然后 npx drizzle-kit push

添加插件后需重新执行。


数据库适配器

数据库配置
SQLite直接传入 better-sqlite3 或 bun:sqlite 实例
PostgreSQL直接传入 pg.Pool 实例
MySQL直接传入 mysql2 pool
PrismaprismaAdapter(prisma, { provider: "postgresql" }),来自 better-auth/​adapters/​prisma
DrizzledrizzleAdapter(db, { provider: "pg" }),来自 better-auth/​adapters/​drizzle
MongoDBmongodbAdapter(db),来自 better-auth/​adapters/​mongodb

常用插件

插件服务端导入客户端导入用途
twoFactorbetter-auth/​pluginstwoFactorClientTOTP/​OTP 双因素
organizationbetter-auth/​pluginsorganizationClient团队/组织
adminbetter-auth/​pluginsadminClient用户管理
bearerbetter-auth/​plugins-API Token 鉴权
openAPIbetter-auth/​plugins-API 文档
passkey@better-auth/​passkeypasskeyClientWebAuthn
sso@better-auth/​sso-企业 SSO

插件用法: 服务端插件 + 客户端插件 + 执行迁移。


鉴权 UI 实现

登录流程:

  1. signIn.email({ email, password }) 或 signIn.social({ provider, callbackURL })
  2. 处理返回的 error
  3. 成功时重定向

客户端会话检查: useSession() 返回 { data: session, isPending }

服务端会话检查: auth.api.getSession({ headers: await headers() })

受保护路由: 检查 session,为空则重定向到 /​sign-in。


安全清单

  • 设置 BETTER_AUTH_SECRET(32+ 字符)
  • 生产环境启用 advanced.useSecureCookies: true
  • 配置 trustedOrigins
  • 启用限流
  • 启用邮箱验证
  • 实现密码重置
  • 敏感应用启用 2FA
  • 不要关闭 CSRF 防护
  • 审查 account.accountLinking

故障排查

问题处理
"Secret not set"添加 BETTER_AUTH_SECRET 环境变量
"Invalid Origin"在 trustedOrigins 中加入域名
Cookie 不生效检查 baseURL 与域名一致;生产启用 secure cookies
OAuth 回调错误在提供方控制台核对 redirect URIs
添加插件后类型报错重新运行 CLI generate/​migrate

参考