Skip to content
Back to skills

Create Auth Skill Majiayu000

ASecurity

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

  • 57 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 17, 2026
developmentjavascripttypescriptrustgojavasqlreactvuenextjsnode

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 17, 2026

npx -y skills add diegosouzapw/awesome-omni-skill --skill create-auth-skill-majiayu000 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Create Auth Skill Majiayu000?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Create Auth Skill Majiayu000
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/diegosouzapw-create-auth-skill-majiayu000/badge)](https://www.skillsdirectory.com/skills/diegosouzapw-create-auth-skill-majiayu000)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: create-auth-skill
description: 使用 Better Auth 为 TypeScript/JavaScript 应用创建鉴权层的技能。
---

# Create Auth Skill

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

**代码示例与语法参见 [better-auth.com/docs](https://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/passkey` | WebAuthn/Passkey 鉴权 |
| `@better-auth/sso` | SAML/OIDC 企业 SSO |
| `@better-auth/stripe` | Stripe 支付 |
| `@better-auth/scim` | SCIM 用户配置 |
| `@better-auth/expo` | React Native/Expo |

---

## 环境变量

```env
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.js | `better-auth/react` |
| Vue | `better-auth/vue` |
| Svelte | `better-auth/svelte` |
| Solid | `better-auth/solid` |
| Vanilla JS | `better-auth/client` |

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

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

---

## 路由处理器配置

| 框架 | 文件 | 处理器 |
|-----------|------|------|
| Next.js App Router | `app/api/auth/[...all]/route.ts` | `toNextJsHandler(auth)` → 导出 `{ GET, POST }` |
| Next.js Pages | `pages/api/auth/[...all].ts` | `toNextJsHandler(auth)` → 默认导出 |
| Express | 任意文件 | `app.all("/api/auth/*", toNodeHandler(auth))` |
| SvelteKit | `src/hooks.server.ts` | `svelteKitHandler(auth)` |
| SolidStart | 路由文件 | `solidStartHandler(auth)` |
| Hono | 路由文件 | `auth.handler(c.req.raw)` |

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

---

## 数据库迁移

| 适配器 | 命令 |
|---------|---------|
| 内置 Kysely | `npx @better-auth/cli@latest migrate`(直接应用) |
| Prisma | `npx @better-auth/cli@latest generate --output prisma/schema.prisma` 然后 `npx prisma migrate dev` |
| Drizzle | `npx @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 |
| Prisma | `prismaAdapter(prisma, { provider: "postgresql" })`,来自 `better-auth/adapters/prisma` |
| Drizzle | `drizzleAdapter(db, { provider: "pg" })`,来自 `better-auth/adapters/drizzle` |
| MongoDB | `mongodbAdapter(db)`,来自 `better-auth/adapters/mongodb` |

---

## 常用插件

| 插件 | 服务端导入 | 客户端导入 | 用途 |
|--------|---------------|---------------|---------|
| `twoFactor` | `better-auth/plugins` | `twoFactorClient` | TOTP/OTP 双因素 |
| `organization` | `better-auth/plugins` | `organizationClient` | 团队/组织 |
| `admin` | `better-auth/plugins` | `adminClient` | 用户管理 |
| `bearer` | `better-auth/plugins` | - | API Token 鉴权 |
| `openAPI` | `better-auth/plugins` | - | API 文档 |
| `passkey` | `@better-auth/passkey` | `passkeyClient` | WebAuthn |
| `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 |

---

## 参考

- [文档](https://better-auth.com/docs)
- [示例](https://github.com/better-auth/examples)
- [插件](https://better-auth.com/docs/concepts/plugins)
- [CLI](https://better-auth.com/docs/concepts/cli)
- [迁移指南](https://better-auth.com/docs/guides)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.