Flujo de Autenticación
Login con email/password
Login con Google OAuth
App Initialization (Angular)
initializeAuth() se llama desde el constructor del Auth service (no desde APP_INITIALIZER). La app arranca inmediatamente sin bloquear el bootstrap — la verificación de sesión corre en paralelo.
Los guards esperan a que
authInitialized$emitatrueantes de evaluar el estado de sesión, evitando falsos negativos durante el arranque.
Guards Angular
| Guard | Aplicado a | Comportamiento |
|---|---|---|
isLoggedIn | /dashboard, /crm, /gtms, /workspaces, etc. | Si no hay currentUser$ → redirige a /login |
notLoggedIn | /login, /register, /forgot-password | Si hay currentUser$ → redirige a / |
UnsavedChangesGuard | /dashboard | Confirma salida si hay cambios sin guardar |
HTTP Interceptor (Angular)
Todas las requests del frontend incluyen withCredentials: true (para enviar el cookie JWT).
Si cualquier endpoint devuelve 401: logout automático + redirect a /login.
JWT Payload
{
"userId": "uuid",
"iat": 1711900000,
"exp": 1711986400
}
Fuentes donde node-api busca el token (en orden):
- Cookie
token(HttpOnly) - Header
Authorization: Bearer <token> - Query param
?token=<token>(para SSE streams)