mcpField
C
create-auth-skill

create-auth-skill

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

关于 create-auth-skill

Create Auth Skill 是为 TypeScript 和 JavaScript 应用添加 Better Auth 身份验证的配置指南,涵盖配置、路由处理器、数据库迁移、客户端设置及所列框架的安全检查。

主要功能

  1. 01项目初始化决策步骤
  2. 02服务端与客户端配置指引
  3. 03按框架提供路由处理器示例
  4. 04数据库适配器与迁移说明
  5. 05身份验证安全检查清单

适用场景

  1. 01为新应用添加 Better Auth
  2. 02为框架配置登录路由
  3. 03设置数据库 schema 和适配器
  4. 04发布前检查身份验证安全

安装

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

$npx skills add https://github.com/panaversity/agentfactory --skill create-auth-skill

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

详细介绍

创建身份验证 Skill

使用 Better Auth 为 TypeScript/JavaScript 应用添加身份验证的指南。

代码示例和语法请参阅 better-auth.com/docs。


决策树

Is this a new/empty project?
├─ YES → New project setup
│   1. Identify framework
│   2. Choose database
│   3. Install better-auth
│   4. Create auth.ts + auth-client.ts
│   5. Set up route handler
│   6. Run CLI migrate/generate
│   7. Add features via plugins
│
└─ NO → Does project have existing auth?
    ├─ YES → Migration/enhancement
    │   • Audit current auth for gaps
    │   • Plan incremental migration
    │   • See migration guides in docs
    │
    └─ NO → Add auth to existing project
        1. Analyze project structure
        2. Install better-auth
        3. Create auth config
        4. Add route handler
        5. Run schema migrations
        6. Integrate into existing pages

安装

核心包: 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+ chars, generate with: openssl rand -base64 32>
BETTER_AUTH_URL=http://localhost:3000
DATABASE_URL=<your database connection string>

按需添加 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: 将 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 连接池
Prisma使用 better-auth/adapters/prisma 中的 prismaAdapter(prisma, { provider: "postgresql" })
Drizzle使用 better-auth/adapters/drizzle 中的 drizzleAdapter(db, { provider: "pg" })
MongoDB使用 better-auth/adapters/mongodb 中的 mongodbAdapter(db)

常见插件

插件服务端导入客户端导入用途
twoFactorbetter-auth/pluginstwoFactorClient使用 TOTP/OTP 进行双重身份验证
organizationbetter-auth/pluginsorganizationClient团队/组织
adminbetter-auth/pluginsadminClient用户管理
bearerbetter-auth/plugins-API 令牌身份验证
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() })

受保护的路由: 检查会话;如果为 null,则重定向到 /sign-in。


安全检查清单

  • 已设置 BETTER_AUTH_SECRET(至少 32 个字符)
  • 在生产环境中设置 advanced.useSecureCookies: true
  • 已配置 trustedOrigins
  • 已启用速率限制
  • 已启用电子邮件验证
  • 已实现密码重置
  • 敏感应用已启用双重身份验证
  • 未禁用 CSRF 保护
  • 已检查 account.accountLinking

故障排除

问题解决方法
"Secret not set"添加 BETTER_AUTH_SECRET 环境变量
"Invalid Origin"将域名添加到 trustedOrigins
未设置 Cookie检查 baseURL 是否与域名匹配;在生产环境中启用安全 Cookie
OAuth 回调错误在提供商控制台中验证重定向 URI
添加插件后出现类型错误重新运行 CLI generate/migrate

资源

评论

支持 Markdown