Autenticación

Kronbase incluye un sistema de auth completo para los usuarios finales de tu aplicación. Las sesiones se almacenan en tu schema de Oracle.

Inicializar el cliente

typescript
// lib/kronbase.ts
import { createClient } from '@kronbase/client'

export const kb = createClient(
  process.env.NEXT_PUBLIC_KB_URL!,   // https://api.kronbase.io/api
  { anonKey: process.env.NEXT_PUBLIC_KB_KEY! }
)

Registro

typescript
// signUp(email, password)
const result = await kb.auth().signUp(
  'usuario@ejemplo.com',
  'contraseña-segura'
)
// result.user  → { id, email, createdAt }
// result.session?.accessToken → JWT

Tras el registro el usuario recibe un código OTP por email. Necesita verificarlo antes de poder iniciar sesión.

Verificar email (OTP)

typescript
// verifyOtp(email, code)
const result = await kb.auth().verifyOtp(
  'usuario@ejemplo.com',
  '482910'   // código de 6 dígitos recibido por email
)
// result.session.accessToken  → JWT de acceso
// result.session.refreshToken → token de refresco

Iniciar sesión

typescript
// signIn(email, password)
const result = await kb.auth().signIn(
  'usuario@ejemplo.com',
  'contraseña-segura'
)
// result.session.accessToken  → JWT (1 hora por defecto)
// result.session.refreshToken → token de refresco (30 días)

Guardar sesión y obtener usuario

typescript
// Guardar tokens en cookies (para SSR / middleware)
await kb.auth().setSession({
  accessToken:  result.session.accessToken,
  refreshToken: result.session.refreshToken,
})

// Leer el usuario actual desde las cookies (sin red)
const user = await kb.auth().getUser()
// user → { id, email, role, ... } | null

Cerrar sesión

typescript
await kb.auth().signOut()

Refrescar token

typescript
const result = await kb.auth().refreshToken(refreshToken)
// result.session.accessToken → nuevo JWT

OTP / Magic link sin contraseña

typescript
// Enviar código OTP al email
await kb.auth().sendOtp('usuario@ejemplo.com', 'code')

// O enviar magic link (click → login automático)
await kb.auth().sendOtp('usuario@ejemplo.com', 'magic_link')

// Verificar el código recibido (mismo método)
const result = await kb.auth().verifyOtp('usuario@ejemplo.com', '482910')

TOTP (autenticación de dos factores)

typescript
// 1. Iniciar configuración — devuelve QR URI y secret
const { qrUri, secret } = await kb.auth().totp.setup()

// 2. Confirmar activación con el primer código del autenticador
const { backupCodes } = await kb.auth().totp.verifySetup('123456')

// 3. Login cuando 2FA está activo
const result = await kb.auth().signIn(email, password)
if ('sessionToken' in result) {
  // requiere segundo factor
  const finalResult = await kb.auth().totp.verify(result.sessionToken, codigoTotp)
}

Endpoints REST directos

bash
# Registro
POST /api/auth/signup
{ "email": "...", "password": "..." }

# Login
POST /api/auth/signin
{ "email": "...", "password": "..." }

# Verificar OTP
POST /api/auth/otp/verify
{ "email": "...", "code": "123456" }

# Refrescar token
POST /api/auth/refresh
Authorization: Bearer <refresh_token>

# Usuario actual
GET /api/auth/me
Authorization: Bearer <access_token>