Loggeando usuarios
Clase 62 de 80 • Curso de Angular 4
Contenido del curso
Introducción a Angular 4
Setup del Ambiente de Trabajo
Conceptos Básicos
- 9

Para qué nos sirven los Módulos y Componentes
08:10 min - 10

Tipos de Data Binding y String Interpolation
05:05 min - 11

Property Binding
06:04 min - 12

Event Binding
03:04 min - 13

ngModel y two way binding en Angular
05:12 min - 14

Directivas en Angular 4 y ngFor
07:39 min - 15

Cómo usar ngIf en Angular 4.0
03:04 min - 16

Instalando librerías con NPM (Google Maps)
06:48 min
Directivas
Angular UI
Ruteo
- 24

Qué hace el router en Angular 4
03:11 min - 25

Implementación de Rutas en el Proyecto
07:36 min - 26

Href vs router link: navegación angular
02:27 min - 27

Resaltando el link activo con CSS para indicar visualmente en que componente nos encontramos
01:53 min - 28

Parámetros de ruta con routerLink en Angular
06:01 min - 29

Parámetros tipo Query
03:53 min - 30

Creando una vista de detalle para el proyecto
09:06 min - 31

Página de contacto Angular desde cero
07:45 min
Servicios
- 32

Servicios en Angular para compartir datos
00:58 min - 33

Creando nuestro propio servicio
07:11 min - 34

Configurando Firebase en nuestro proyecto
05:12 min - 35

Guardando Records en Firebase
12:20 min - 36

Obteniendo records desde Firebase
08:40 min - 37

Obteniendo coordenadas usando Geocoding
13:45 min - 38

Reto: Crear una vista para editar records
09:29 min - 39

Mostrando marcadores en el Mapa de Google
03:02 min
Conexión Remota (Http y Sockets)
Pipes
Animaciones en Angular
Testing en Angular
Autenticación y Protección de Rutas
- 59

Cómo funcionan los JSON Web Tokens
03:05 min - 60

Preparación de vistas para login y registro
11:58 min - 61

Registrando usuarios
07:29 min - 62

Loggeando usuarios
Viendo ahora - 63

Guardias canActivate en Angular: Proteger rutas con autenticación
11:09 min - 64

Cómo integrar Facebook login con Firebase
09:08 min - 65

Logout en Angular con Firebase
05:28 min
RxJS
- 66

Cómo funciona RxJS con metáfora de oficina
02:09 min - 67

Mostrar email del usuario logueado en Angular
06:32 min - 68

Uso de los Observables
04:30 min - 69

Cómo implementar type ahead con Observables y RxJS
10:43 min - 70

Implementar formularios reactivos con type ahead
07:58 min - 71

Cómo rellenar campos automáticamente con Google
01:28 min
Publicando nuestro proyecto
Fin del curso
Sesiones en vivo
Contenido Bonus
Aprende a implementar el login con Firebase en Angular con una configuración segura: ajusta las reglas de la base de datos, usa angular/fire y verifica el JSON Web Token en Local Storage. Verás cómo solucionar el error the email address is badly formatted, conectar el formulario con ngModel y confirmar que los datos solo cargan cuando el usuario está autenticado.
¿Cómo activar login con Firebase y proteger lectura y escritura?
Configurar las reglas de seguridad es clave. Al inicio, lectura y escritura estaban en true, lo que permite acceso público. La mejora es exigir autenticación con la condición auth != null y publicar los cambios.
- Antes: reglas abiertas para leer y escribir.
- Ahora: reglas que requieren usuario autenticado.
- Publicar cambios y refrescar para aplicar reglas.
Ejemplo de reglas en Firebase Realtime Database:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Un detalle importante: después de registrar, la librería angular/fire deja al usuario logueado automáticamente. Esto explica por qué, tras aplicar reglas, los datos aún se ven: existe una sesión activa en el navegador.
¿Dónde se guarda la sesión en el navegador?
En Chrome, la sesión se observa en Application > Local Storage > localhost bajo la clave Firebase Auth User. Ese objeto guarda el JSON Web Token, que se usa para autenticar solicitudes.
- Eliminar esa clave provoca que falle la carga de datos.
- Angular intenta recargar la lista y se muestra el error capturado en el módulo de HTTP.
- Al refrescar, sin sesión, ya no se listan los lugares, como dictan las reglas.
¿Por qué apareció el error con el email y cómo se corrige?
Al intentar el primer login, surge el mensaje: the email address is badly formatted. No se debía a un correo mal escrito, sino a que se estaban enviando parámetros fijos en lugar de enlazar el formulario.
- El template no tenía ngModel en los inputs.
- El componente enviaba email y password hardcodeados.
- Solución: replicar el patrón usado en registro, moviendo a un objeto de parámetros y enlazando con ngModel.
¿Qué cambios hacer en login.component y en el servicio?
1) En el HTML, enlazar inputs y enviar el objeto al hacer clic:
<input type="email" [(ngModel)]="loginParams.email" placeholder="correo" />
<input type="password" [(ngModel)]="loginParams.password" placeholder="contraseña" />
<button (click)="login(loginParams)">Login</button>
2) En login.component.ts, remover la llamada de autorización del constructor y crear el método login que use los parámetros del formulario:
login(loginParams: { email: string; password: string }) {
this.autorizacionService.login(loginParams.email, loginParams.password);
}
3) En autorizacion.service, cambiar createUserWithEmailAndPassword por signInWithEmailAndPassword y ajustar el mensaje:
login(email: string, password: string) {
return this.afAuth
.signInWithEmailAndPassword(email, password)
.then(() => alert('usuario logueado con éxito'))
.catch(err => alert('un error ha ocurrido: ' + err.message));
}
Con estos cambios, al hacer login:
- Se agrega de nuevo la clave de auth en Local Storage.
- El token queda disponible para autenticar peticiones.
- En inicio, la lista de lugares vuelve a cargar porque el usuario ya está autenticado.
¿Qué validar después del login para una mejor experiencia?
Una vez que el login funciona y las reglas protegen el acceso, aún es posible navegar por pantallas no restringidas sin estar autenticado. El siguiente paso recomendado es la protección de rutas para ocultar secciones y menú cuando no hay sesión activa.
- Asegurar rutas sensibles con guardas de autenticación.
- Ocultar elementos del menú que requieren sesión.
- Mostrar estados claros: logueado o no logueado.
¿Quieres que profundicemos en la protección de rutas con Angular y Firebase? Deja tus dudas o comentarios y contemos qué parte te gustaría ver implementada paso a paso.