create-auth-skill
npx skills add https://github.com/kunhai-88/skills --skill create-auth-skill
Agent 安装分布
Skill 文档
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/passkey |
WebAuthn/Passkey é´æ |
@better-auth/sso |
SAML/OIDC ä¼ä¸ SSO |
@better-auth/stripe |
Stripe æ¯ä» |
@better-auth/scim |
SCIM ç¨æ·é ç½® |
@better-auth/expo |
React 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.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 å®ç°
ç»å½æµç¨ï¼
signIn.email({ email, password })æsignIn.social({ provider, callbackURL })- å¤çè¿åç
error - æåæ¶éå®å
客æ·ç«¯ä¼è¯æ£æ¥ï¼ 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 |