Es tu turno de continuar explorando los Guards de Angular y sus posibilidades para la segurización de rutas. El reto para ti es crear un Guard que valide el "rol" del usuario logueado y le permita o no entrar a los módulos de administración de tu aplicación.
Proceso para hacer Guard para Admin
Recuerda importar los Guards en el routing de tu aplicación, ya sea para bloquear el acceso a los módulos o el acceso a un componente individual.
También puedes segurizar las reglas de tu routing con más de un Guard a la vez, separando así la lógica de autenticación y autorización de los usuarios.
Gracias, aún seguía con la anterior y no obtenía el role del usuario.
Solo para recordarles que tienen que cambiar la API en el archivo proxy.config.json y en el environment.prod.ts
Cabe señalar que, es importante asegurarse en el backend que los request a endpoints de administración lo realicen usuarios con dichos roles, no es buena practicar delegar esas verificaciones al front.
Obviamente, aplicar lo que estamos aprendiendo en esta clase mejora mucho la experiencia de usuario y es una primera línea de seguridad para la aplicación.
Aqui la url
https://damp-spire-59848.herokuapp.com/api/users
Ya logré conservar la pagina al recargar, lo que hice fue poner en localstorage un rol en el servicio de auth y le asigno el rol del usuario y si es admin, le doy acceso
Algo pasa, que no estamos teniendo en cuenta.
Anteriormente creé un usuario admin y un par de usuarios customer, e hice login con uno y con otro, pero después de un rato.
si yo me estoy haciendo login con este usuario
{email:'johnydeep@gmail.com',password:'12345678'}
pero ahora cuando me devuelve el token, me da esto
No entiendo, hay algo que no estamos teniendo en cuenta con el user$
¿Podrías revisar ese código, por favor, del vídeo 22?
¿Qué enviamos, qué recibimos y porqué muestra lo que muestra, que no se corresponde?
Gracias de antemano.
Algo pasa, que no estamos teniendo en cuenta.
Anteriormente creé un usuario admin y un par de usuarios customer, e hice login con uno y con otro, pero después de un rato.
si yo me estoy haciendo login con este usuario
{email:'johnydeep@gmail.com',password:'12345678'}
pero ahora cuando me devuelve el token, me da esto
No entiendo, hay algo que no estamos teniendo en cuenta con el user$
¿Podrías revisa ese código, del vídeo 22?
¿Qué enviamos, qué recibimos y porqué muestra lo que muestra, que no se corresponde?
Gracias de antemano.
Hola Juan
Me parece que debe haber algún lugar en el que no se está actualizando este perfil. Compártenos el código que tienes en los archivos donde crees que haya un error.
Te sugiero revisar el archivo en el que se define al profile del usuario y su contraseña.
También puedes ver en los recursos de la clase todos los archivos que tiene el profesor en el repositorio y verificar si es que hay alguna línea que tú tengas que sea diferente.
Hola Juan
Me parece que debe haber algún lugar en el que no se está actualizando este perfil. Compártenos el código que tienes en los archivos donde crees que haya un error.
Te sugiero revisar el archivo en el que se define al profile del usuario y su contraseña.
También puedes ver en los recursos de la clase todos los archivos que tiene el profesor en el repositorio y verificar si es que hay alguna línea que tú tengas que sea diferente.
Si se accede por el link que se creó en profile, se puede acceder sin problemas al cms, pero si se da la ruta al navegador, directamente hace redirección a home, ¿alguna idea de como arreglar esto?
Hola Luis, claro que sí, tengo una forma de arreglarlo, pero realmente no sé si es la mejor, sin embargo me funcionó.
El problema radica en la lógica que Nicolas utiliza en el Guard, donde en un return pone el observador y con ayuda de map modifica el return, realmente no sé porque es el problema, ( si alguno sabe, porfavor dejalo saber ), siguiendo con la solución y con el objetivo de seguir utilizando el observador o la reactividad, nos suscribimos tal y como lo hicimos anteriormente en los otros componentes, esto dentro del metodo canActivate:
Antes de esto, asegurate tener una variable puede ser arriba del constructor donde almacenaremos lo que el observador nos devuelve, que es el usuario..
privateuser:User|null=null
Luego, después de suscribirte (Dentro de canActivate) haces la condicional con la varible y retornas:
Esto lo puedes utilizar también en el Guard del admin, sólo que allí debes verificar en la condicional que el rol sea el de admin
Es porqué al esperar la respuesta o subscripciòn del Observable llega como Undefined entonces seria hacer un esperar para esperar que se complete la subscription
https://damp-spire-59848.herokuapp.com/ está retornarndo siempre el perfil del rol de administrador independientemente del token que se le envíe, quisiera saber si solo me está sucediendo a mi o es un error generalizado para todos ? Gracias
Me sucede lo mismo
Pero si le cambias por otra cuenta que estaban en el postman, si te entran con esas cuentas, menos con el que has creado :/
Si no dejas que cargue la aplicacion y el app component haga la request del get profile no te deja entrar al cms por via url directa, yendo al perfil y despues clickear el boton asegura que la request ya se haya hecho, pero como decia en la clase anterior, es mejor manejar un estado en localstorage que se consulte cuando se cargue la aplicacion sin request, ya sea encriptando el usuario en el token o algo parecido. A LOS QUE LES NIEGA EL ACCESO TIENEN QUE ESPERAR A QUE LA APP CONSULTE EL GET PROFILE, no es que la aplicación este mala.