Sergio Geovani Ruíz Reyes
Ricardo Chavarria
Logra que tu barra superior muestre el correo del usuario logueado junto al botón de logout usando Firebase en Angular. Con un ajuste simple en tu service y un pequeño setTimeout, evitas listeners costosos y obtienes el currentUser completo para leer su email. Además, prepara el proyecto para trabajar con RxJS y Observable.
¿Cómo obtener el usuario con Firebase Auth en Angular?
Para exponer al usuario logueado, se crea un método en el archivo de autorización.service.ts que retorne el objeto de autorización de Firebase. Así puedes inspeccionarlo y luego acceder a las propiedades útiles, como el currentUser.
// autorización.service.ts public getUser() { return this.angularFireAuth.auth; }
¿Cómo leer currentUser y su email de forma segura?
A veces, justo al cargar, algunas propiedades de Firebase vienen en null o undefined. La solución práctica aquí es esperar medio segundo (500 ms) antes de leer el currentUser. Así obtienes el objeto completo sin abrir un socket ni suscribirte todavía a nada.
// app.component.ts logUser: any = null; // Cuando el usuario está logueado setTimeout(() => { const auth = this.autorizacionService.getUser(); this.logUser = auth.currentUser.email; // console.log(this.logUser); }, 500);
¿Cómo mostrar el email junto al botón de logout con ngIf?
Coloca un nuevo <li> dentro del menú superior. Úsalo con interpolación de string y controla su visibilidad con ngIf para que solo aparezca cuando haya valor.
<!-- app.component.html --> <li *ngIf="logUser"> <a>{{ logUser }}</a> </li>
¿Por qué esperar medio segundo en lugar de usar sockets u observables?
Porque, en este caso, el objetivo es simple: leer el email cuando ya está disponible. Escuchar cambios permanentes a través de un socket o con flujos complejos puede gastar recursos innecesariamente. Si sabes que el usuario estará listo casi de inmediato, un retardo breve es suficiente.
¿Cómo preparar el proyecto para RxJS y observables?
Si quieres avanzar a un enfoque reactivo, basta con importar RxJS y Observable en tu componente. Esto deja listo el entorno para, más adelante, suscribirte a flujos y manejar estados de autenticación de forma declarativa.
// app.component.ts import 'rxjs/Rx'; import { Observable } from 'rxjs';
¿Te funcionó esta implementación? Comparte tus dudas o mejoras en los comentarios y cuéntame cómo mostrarás más datos del usuario junto al logout.
Sergio Geovani Ruíz Reyes
Ricardo Chavarria
Andres Felipe Valencia Benitez
Usuario anónimo
UserWilliam Garcia
Noé Muñoz
Carlos Uriel de Jesus Sánchez González
Wilson Fabian Pérez Sucuzhañay
Joan Rueda
Daniela Michelle Rosales Lopez
Gabriel Solorzano
Yo lo resolví directamente en el subscribe del método isLogged del servicio AutorizacionService sin necesidad de crear otro método ni usar el setTimeOut, ya que el objeto dentro del observable contiene dicha información.
this.autorizacionService.isLogged() .subscribe((result) => { if (result && result.uid) { this.loggedIn = true; this.credenciales = result; } else { this.loggedIn = false; } }, (error) => { this.loggedIn = false; })
Y en la vista:
<ul class="nav navbar-nav navbar-right" *ngIf="loggedIn"> <li><a>{{credenciales.email}}</a></li> <li><a (click)="logout()">Logout</a></li> </ul>
Gracias por el aporte.
Según el vídeo anterior entendí que RxJS, es como un orquestador de tareas o información teniendo en cuenta el flujo dinámico de los datos.
Sin embargo para entender mejor hice una pequeña busqueda:
ReactiveX Library for JavaScript
Es una librería para la programación reactiva usando Observables, esto hace mas facil la composición de codigo asincrono o codigo basado en callback.
La programación reactiva es un paradigma de programación basado en el flujo de datos que pueden cambiar.
Por ejemplo un asignación simple de una variable a:= b + c; donde el valor de a es asginado dependiendo del valor de b y c, pero los valores de b y c pueden cambiar sin tener un efecto en la variable a. En la programación reactiva el valor de a automaticamente es actualizada cuando los valores de b o c cambian, sin tener que volver a ejecutar la sentencia a:= b + c.
¡Gran aporte!.
Saludos.
Vvvvvvc;cc vff'fgf+fjkjjjjjj+jn;
RxJS: Es un operador que se utiliza para trabajar con datos de forma asíncrona, tomando el cuenta el flujo de datos, 😉
rxjs es como manejar funciones sincronas??
Sirve hacerlo en la respuesta o result del logueo?
emailUser: any = “”;
constructor(private autorizacionService: AutorizacionService){
this.autorizacionService.isLogged()
.subscribe((result)=>{
if(result && result.uid) {
this.emailUser = result.email;
this.loggedIn = true;
}else{
this.loggedIn = false;
}
}, (error)=>{
this.loggedIn = false;
});
}
Al añadir los imports:
import { Observable } from “rxjs”;
import ‘rxjs/Rx’;
Obtengo el error:
ERROR in node_modules/rxjs/Rx.d.ts(1,15): error TS2307: Cannot find module ‘rxjs-compat’.
Realizo: “npm install rxjs --save” en consola, en la carpeta del proyecto pero no soluciona el problema.
Sabéis a que se debe este error?
Muchas gracias!
import Rx from ‘rxjs/Rx’;
Gracias DaniRosales