Volver a la wiki

Endpoint GET /api/me — CF Pages Function (resolución de usuario)

Endpoint GET /api/me — CF Pages Function (resolución de usuario)

Ruta: functions/api/me.ts
Runtime: Cloudflare Pages Functions (runtime, no prerendered)
Introducido en: commit 8132309 · 2026-04-28

Propósito

Devuelve el usuario actualmente autenticado leyendo el header HTTP que Cloudflare Access inyecta en cada request que pasa por la política “Team only”. Permite que el frontend identifique al usuario sin sesión Django ni cookie de aplicación.

Por qué vive en CF Pages Function y no en Astro

AppLayout.astro utiliza output: 'static' — todas las páginas Astro son prerendered en build time y no tienen acceso a Astro.request.headers en runtime. La CF Function sí se ejecuta en edge runtime con acceso a la request real, por lo que puede leer el header de CF Access.

Contrato HTTP

GET /api/me
Authorization: (gestionada por CF Access — header inyectado automáticamente)

200 OK
Cache-Control: private, no-store
Content-Type: application/json

{
  "user": "Edu" | "Dani" | "Txell" | null,
  "email": "edudomo2@gmail.com" | "dfuentes@edomo.net" | "tfuentes@edomo.net" | null
}

Mapeo email → nombre (staff)

const STAFF_EMAIL_TO_NAME: Record<string, string> = {
  'edudomo2@gmail.com': 'Edu',
  'dfuentes@edomo.net': 'Dani',
  'tfuentes@edomo.net': 'Txell',
};

El email se normaliza a lowercase antes del lookup. Emails fuera del mapa devuelven user: null; el cliente conserva el default guardado en localStorage.

Flujo de resolución completo

CF Access policy "Team only"
  → inyecta Cf-Access-Authenticated-User-Email en la request
    → GET /api/me (CF Pages Function)
      → responde { user, email }
        → resolveUserFromCfAccess() en prefs.ts
          → actualiza localStorage
          → emite evento prefs-user-change si el usuario cambió

Comportamiento en dev local

Sin CF Access activo, el header no existe → email: null → user: null. El helper resolveUserFromCfAccess() detecta null y no modifica el usuario guardado en localStorage. El fallback por defecto es 'Edu' (valor inicial de loadPrefs()).

Escalado futuro

Cuando onboarden nuevas cuentas (Dani, Txell), el sistema las reconoce automáticamente añadiendo su email al mapa STAFF_EMAIL_TO_NAME. No requiere cambio en el frontend.

Consideraciones de seguridad

Véase también

Subir