resolveUserFromCfAccess() — Helper de resolución de usuario (prefs.ts)
Módulo:
src/lib/prefs.ts
Exportada en:MobileApp.tsx,DesktopApp.tsx
Introducida en: commit8132309· 2026-04-28
Propósito
Función async que resuelve la identidad del usuario actual consultando el endpoint GET /api/me (CF Pages Function) y sincroniza el resultado con localStorage, emitiendo un evento DOM si el usuario ha cambiado. Es el puente entre Cloudflare Access y el sistema de preferencias del frontend.
Firma
export async function resolveUserFromCfAccess(): Promise<void>
Comportamiento
1. fetch('/api/me') → { user, email }
2. Si user === null → no-op (email fuera del mapa o dev local)
3. Si user === getCurrentUser() → no-op (ya es el usuario correcto)
4. Si user !== getCurrentUser():
a. Guarda user en localStorage
b. dispatchEvent(new CustomEvent('prefs-user-change', { detail: { user } }))
Cuándo se ejecuta
Se llama en el useEffect(() => { … }, []) (mount) de:
| Componente | Archivo |
|---|---|
MobileApp | src/components/MobileApp.tsx |
DesktopApp | src/components/DesktopApp.tsx |
Ambos shells de la aplicación lo disparan una única vez en la hidratación inicial. No hay polling — la resolución es puntual al cargar.
Evento emitido
CustomEvent: 'prefs-user-change'
detail: { user: string }
Los consumidores del evento (componentes que necesitan reaccionar al cambio de usuario) escuchan window.addEventListener('prefs-user-change', handler).
Relación con el sistema de preferencias
prefs.ts gestiona las preferencias de usuario (tema, accent, fontSize, etc.) por usuario en localStorage. resolveUserFromCfAccess() garantiza que, al cargar la app en producción, el perfil de preferencias activo corresponde al usuario autenticado en CF Access — no al último usuario que usó ese navegador.
Fallback en dev local
Sin CF Access, /api/me devuelve { user: null }. La función hace no-op y el usuario permanece como está en localStorage. El valor por defecto de getCurrentUser() / loadPrefs() es 'Edu'.
Dependencias internas
getCurrentUser()— lee el usuario actual delocalStorage.GET /api/me— [[entity—workers—endpoint—api-me]] — endpoint CF Pages Function.
Véase también
- [[entity—workers—endpoint—api-me]]
- [[entity—frontend—component—mobile-app]]
- [[entity—frontend—component—desktop-app]]
- [[feature—mobile—refresh-2026-mobile-review]]