---
name: add-login
description: "Añade auth completo a un proyecto SvelteKit/Next: Keycloak self-hosted (default Vektrun no-vendor-lockin) o Supabase Auth (si el proyecto ya lo usa). Componentes: /login, /register, /logout, protected routes middleware, session refresh. Trigger words: 'add-login', 'add auth', 'añadir login', 'auth completo'."
---

# add-login — Auth completo self-hosted

## Objetivo
Instalar auth end-to-end en un repo existente sin vendor lock-in.

## Precondición
- Repo con framework detectable (SvelteKit / Next / FastAPI)
- `init.sh` OK
- Decidido: Keycloak self-hosted (default) o Supabase Auth (si aplica)

## Pipeline

### 1. Detectar/decidir backend auth
- **Default:** Keycloak (self-hosted, ya en stack VKF Guard)
- **Alternativa:** Supabase Auth solo si el proyecto usa Supabase para DB
- Preguntar Mauri si ambigüedad

### 2. Instalar deps
- SvelteKit + Keycloak: `keycloak-js` + `@sveltejs/kit` middleware
- SvelteKit + Supabase: `@supabase/supabase-js` + `@supabase/ssr`
- Next.js: `next-auth` o `@supabase/auth-helpers-nextjs`
- Verificar via `pre_npm_install_guard.py` (ghost packages)

### 3. Rutas base
- `POST /api/auth/login` (credentials → JWT)
- `POST /api/auth/logout` (clear session)
- `GET /api/auth/session` (validate)
- Middleware protect `/dashboard/**`

### 4. UI components
- `/login` + `/register` con formulario mínimo
- `<AuthGuard>` wrapper para rutas protegidas
- Redirect a `/login?redirect=<path>` si no auth

### 5. Configuración env
- `KEYCLOAK_URL` + `KEYCLOAK_REALM` + `KEYCLOAK_CLIENT_ID`
- Nunca `NEXT_PUBLIC_*` para secrets (regla Karpathy)

### 6. Tests smoke
- Login → session cookie set
- Logout → session cleared
- Protected route redirect

### 7. Commit atómico
- `feat(auth): add Keycloak SSO with protected routes`
- Push tras verificar

## Reglas
- Rate limit 10 req/s/IP en `/api/auth/**`
- Session TTL 30d refresh
- CORS restrictivo a origin propio
- HSTS + CSP obligatorio

## Antipatrones
- No hardcodear secrets · env only
- No custom crypto · usa librería probada
- No auth "casera" · SSO real siempre

## Ver también
- [[project-security-gateway-architecture]] · Keycloak stack Vektrun
- [[plan-security-audit]]
- [[project-forge-methodology-integration]]
