create-auth-skill
Original:🇺🇸 English
Not Translated
Skill for creating auth layers in TypeScript/JavaScript apps using Better Auth.
2installs
Sourcepanaversity/agentfactory
Added on
NPX Install
npx skill4agent add panaversity/agentfactory create-auth-skillSKILL.md Content
Create Auth Skill
Guide for adding authentication to TypeScript/JavaScript applications using Better Auth.
For code examples and syntax, see better-auth.com/docs.
Decision Tree
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 pagesInstallation
Core:
npm install better-authScoped packages (as needed):
| Package | Use case |
|---|---|
| WebAuthn/Passkey auth |
| SAML/OIDC enterprise SSO |
| Stripe payments |
| SCIM user provisioning |
| React Native/Expo |
Environment Variables
env
BETTER_AUTH_SECRET=<32+ chars, generate with: openssl rand -base64 32>
BETTER_AUTH_URL=http://localhost:3000
DATABASE_URL=<your database connection string>Add OAuth secrets as needed: , , , etc.
GITHUB_CLIENT_IDGITHUB_CLIENT_SECRETGOOGLE_CLIENT_IDServer Config (auth.ts)
Location: or
lib/auth.tssrc/lib/auth.tsMinimal config needs:
- - Connection or adapter
database - - For email/password auth
emailAndPassword: { enabled: true }
Standard config adds:
- - OAuth providers (google, github, etc.)
socialProviders - - Email verification handler
emailVerification.sendVerificationEmail - - Password reset handler
emailAndPassword.sendResetPassword
Full config adds:
- - Array of feature plugins
plugins - - Expiry, cookie cache settings
session - - Multi-provider linking
account.accountLinking - - Rate limiting config
rateLimit
Export types:
export type Session = typeof auth.$Infer.SessionClient Config (auth-client.ts)
Import by framework:
| Framework | Import |
|---|---|
| React/Next.js | |
| Vue | |
| Svelte | |
| Solid | |
| Vanilla JS | |
Client plugins go in .
createAuthClient({ plugins: [...] })Common exports: , , , ,
signInsignUpsignOutuseSessiongetSessionRoute Handler Setup
| Framework | File | Handler |
|---|---|---|
| Next.js App Router | | |
| Next.js Pages | | |
| Express | Any file | |
| SvelteKit | | |
| SolidStart | Route file | |
| Hono | Route file | |
Next.js Server Components: Add plugin to auth config.
nextCookies()Database Migrations
| Adapter | Command |
|---|---|
| Built-in Kysely | |
| Prisma | |
| Drizzle | |
Re-run after adding plugins.
Database Adapters
| Database | Setup |
|---|---|
| SQLite | Pass |
| PostgreSQL | Pass |
| MySQL | Pass |
| Prisma | |
| Drizzle | |
| MongoDB | |
Common Plugins
| Plugin | Server Import | Client Import | Purpose |
|---|---|---|---|
| | | 2FA with TOTP/OTP |
| | | Teams/orgs |
| | | User management |
| | - | API token auth |
| | - | API docs |
| | | WebAuthn |
| | - | Enterprise SSO |
Plugin pattern: Server plugin + client plugin + run migrations.
Auth UI Implementation
Sign in flow:
- or
signIn.email({ email, password })signIn.social({ provider, callbackURL }) - Handle in response
error - Redirect on success
Session check (client): hook returns
useSession(){ data: session, isPending }Session check (server):
auth.api.getSession({ headers: await headers() })Protected routes: Check session, redirect to if null.
/sign-inSecurity Checklist
- set (32+ chars)
BETTER_AUTH_SECRET - in production
advanced.useSecureCookies: true - configured
trustedOrigins - Rate limits enabled
- Email verification enabled
- Password reset implemented
- 2FA for sensitive apps
- CSRF protection NOT disabled
- reviewed
account.accountLinking
Troubleshooting
| Issue | Fix |
|---|---|
| "Secret not set" | Add |
| "Invalid Origin" | Add domain to |
| Cookies not setting | Check |
| OAuth callback errors | Verify redirect URIs in provider dashboard |
| Type errors after adding plugin | Re-run CLI generate/migrate |