Inicio de sesión
El sitio nunca ve contraseñas: Google o Facebook confirman quién es la persona y la API emite una sesión propia.
Con Google
Sección titulada «Con Google»sequenceDiagram
autonumber
actor P as Persona
participant S as Sitio (/login)
participant G as Google Identity Services
participant A as API
participant D as Base de datos
P->>S: Abre "Iniciar sesión"
S->>G: Carga el botón (client id público)
P->>G: Elige su cuenta de Google
G-->>S: Credencial firmada (ID token)
S->>A: POST /auth/google { credential, locale } + api key
A->>G: Verifica firma, audiencia (client id) y vencimiento
A->>D: Busca la identidad google/sub<br/>o la crea (o la une por email verificado)
opt Cuenta nueva
A-)P: Mail de bienvenida (ver Mails)
end
opt Email en BOOTSTRAP_ADMIN_EMAILS y sin cambios de rol previos
A->>D: La hace admin y lo registra
end
A->>D: Guarda el hash del refresh token nuevo
A-->>S: access token (15 min) + refresh token (30 días) + usuario con rol
S->>S: Guarda la sesión en localStorage
S->>S: Sincroniza la cuenta (ver Sincronización)
- Facebook sigue el mismo camino con
POST /auth/facebook(token de Facebook Login, que la API valida contra Graph API). El botón está deshabilitado hasta que exista la app de Meta. - Si la persona ya tenía cuenta con el otro proveedor y el mismo email verificado, se vincula a esa cuenta en lugar de crear otra (y no hay mail de bienvenida).
localees el idioma de la página (esoen): la bienvenida lo usa mientras el perfil no tenga idioma.
Qué tiene que estar configurado
Sección titulada «Qué tiene que estar configurado»| Dónde | Qué | Si falta |
|---|---|---|
| Google Cloud | Credencial OAuth web con https://inzumer.github.io como origen autorizado |
El botón muestra un error de origen |
| Sitio | PUBLIC_GOOGLE_CLIENT_ID y PUBLIC_API_URL (variables del repo) |
No aparece el botón o no hay cuentas |
| API (Render) | El servicio creado, con GOOGLE_CLIENT_ID y CORS_ORIGIN |
Google responde bien pero la sesión no se crea |
