Controla el acceso y la visibilidad de tu interfaz en Angular con total claridad. Aquí verás cómo usar AngularFireAuth, authState, ngIf y un guardia canActivate para mostrar u ocultar elementos según el estado de sesión, y cómo impedir el acceso por URL a vistas restringidas. Además, se explica el rol del JSON Web Token en local storage y el ajuste de reglas de lectura y escritura.
¿Cómo controlar la UI con ngIf y authState?
Para decidir qué ve un usuario según si está logueado, se aprovecha authState de AngularFireAuth. Este stream existe solo cuando hay sesión activa y expone un identificador único (UID).
Idea clave: authState indica si hay usuario autenticado.
Variable de estado: loggedIn = false para controlar la vista.
Visibilidad condicional: usar ngIf para mostrar u ocultar login y registro.
¿Qué hace la función isLogged?
Función pública: isLogged devuelve el stream de autenticación.
Origen de datos: usa el objeto de autorización y su authState.
Inicio temprano: se invoca desde el constructor para escuchar desde que abre la app.
Prueba final: sin sesión, no permite navegar ni con la URL directa; con sesión, el acceso se concede normalmente.
Palabras clave y habilidades trabajadas: JSON Web Token en local storage, authState y stream de autenticación, control visual con ngIf, manejo de errores en subscribe, reglas de lectura y escritura en base de datos, uso de guardia canActivate, configuración en providers y rutas, y navegación protegida por URL y path.
¿Te gustaría que profundicemos en el flujo de logout o en estrategias de redirección tras el login? Comparte tus dudas y casos de uso en los comentarios.
Guardias canActivate en Angular: Proteger rutas con autenticación
Este curso se saco apenas salio la versión de Angular 4, infortunadamente el ciclo de actualizaciones de angular es muy corto y es bastante difícil seguir el paso ya que sacan versiones cada 6 meses, hay un par de clases que muestran los cambios entre versiones y como implementarlos.
Al momento de modificar las reglas y dejar el valor del atributo _write _como ‘auth !== null’ provoca que ya no se puedan registrar usuarios nuevos.
¿Alguien sabe de que forma podemos manejar esto y poder permitir la escritura solo en el caso del registro? ¿O consideran que lo mejor en este caso sería manejarlo con el guardia y habilitar la escritura para todos?
¿Qué pasa si tengo un usuario en firebase de email con identificador 'minombre@empresa.com' y cuando uso el login con facebook el identificador también es 'minombre@empresa.com' ? Firebase me manda error.
La ruta del import la tienes mal es ./autorization.service en lugar de ./services/autorization.service ya que my-guard.service y autorizacion.service estan en la misma carpeta.
Para que cuando se cree la instancia de AutorizacionService o se cargue este servicio de inmediato llame a la función isLogged y desde ese momento poder verificar si el usuario se encuentra o no logueado.
Pude resolver, resulta que solamente es que en el servicio de mi guardia había olvidado el @ antes de Injectable jajajaja.
Hola a todos. Encontré la solución al problema del las peticiones HTTP con token. Muchos por aquí ya dieron su solución. Pero a mí no me sirvió ninguna de ellas. Os dejo mí código por aquí:
constructor(privatelugaresService:LugaresService,privatefireAuth:AngularFireAuth){this.fireAuth.auth.onAuthStateChanged(user=>{if(user){this.fireAuth.auth.currentUser.getIdToken(true).then((idToken)=>{this.lugaresService.getLugares(idToken).subscribe(lugares=>{this.lugares=Object.keys(lugares).map(key=>{ lugares[key].id= key;return lugares[key];});this.state='final';},error=>{this.errorMessage=`Tenemos algo de dificultados, disculpe las molestias. Error: ${error.status}`;});});}});}
this.fireAuth.auth.onAuthStateChanged Es un escuchador de eventos que saltará cuando firebase haya devuelto el usuario logeado. Con eso podrás hacer F5 y no dará error.
this.fireAuth.auth.currentUser.getIdToken Con esta línea pides el token de autenticación del usuario logeado.
this.lugaresService.getLugares Y por último llamamos a nuestro servicio de lugares pasándole el token como parámetro.
ERRORin./src/app/services/my-guard.service.tsModule parse failed:The keyword 'private' is reserved(25:16)You may need an appropriate loader to handle this file type.|{| loggedIn =false;|constructor(private, authservice, autorizaciones_service_1.AutorizacionesService);|{|this.authservice.isLogged() @ ./src/app/app.module.ts34:25-63 @ ./src/main.ts @ multi webpack-dev-server/client?http://0.0.0.0:0./src/main.ts