Autenticación y Manejo de Tokens en Peticiones HTTP
Resumen
Luego de que el usuario se halla registrado, puedes utilizar el token para realizar peticiones al backend que requieran de autenticación. Para esto, es necesario inyectar dicho token en las solicitudes HTTP.
Autenticación del Usuario
Para esto, puedes obtener el token desde Local Storage (o si prefieres guardarlo en Cookies) e inyectarlo directamente en los Headers de la petición.
El protocolo de este tipo de token suele emplear la palabra Bearer seguido de un espacio por delante del propio token.
Puede ser bastante engorroso tener que inyectar el token, método por método en todos los endpoints que necesitas consumir. Puedes simplificar esto con una única función que construya los headers.
Excelente. Importante iniciar el profile con tipo User, ya que con null, como lo muestra el profesor, genera error
profile:User={id:'',email:'',password:'',name:''}
Mi solucion fue bastante mas floja, deje todo donde estaba y utilice un input para pasar el componente padre app al componente hijo nav el email.
De hecho, también lo hice así. Era como la solución más rapida para lo que pidio explicitamente el profe Nicolas.
jajaja bueno dicen que las grandes mentes piensan igual, x3
me quedó con la sensación de que estas clases son demaciado especificas, no siento que pueda generalizar esta información a varios contextos, siento que explica todo como si de un tutorial para trabajar con esta api en especifico se tratase, lo que aún despues de haber entendido lo que explica me queda la sensación de no haber aprendido.
El trabajar con APIs es muy similar, una petición y obtener una respuesta. Un poco más complicado es enviar un token y considero que la explicación fue suficiente.
el funcionamiento de este ejemplo es similiar a como se hace en un entorno real, para poder entenderlo del todo, toca hacer varios ejercicios.
Mi único problema es que llegado este punto me urge poder hacer routing para ordenarlo todo, me da cosa tenerlo todo metido en el products 🥲.
Me pueden regalar una explicación para dummies de que significa el ". Set". En la cabeza tengo que es para enviar parámetros, pero sé que no es así de simple.
"set" es como poner o asignar un valor o header
cuando pones headers.set le estas diciendo que vas a setear un nuevo header de tipo Authorization con el valor del token
Estoy teniendo el error 401 con auth/profile, no se si cambió el API.
cpmparte tu codigo
en app.component.ts está así, y para un manejo reactivo creé un observable donde se guarde el profile.
Estaré comentando este increíble recurso en varias clases, espero más y más jóvenes desarrolladores utilicen los materiales y los componentes ya establecidos y optimizados en la web
Esta fue mi solución, aunque me di cuenta de que el segundo switchMap se está llamando aproximadamente 200 veces. ( creo que la misma cantidad de veces que la longitud del token en caracteres )
Si alguien tiene alguna idea de por que sucede esto, le agradecería un montón que me lo explicara
Puede ser que el primer switchMap está raro, ya que un switchMap debe retornar un observador y en esta línea this.token = token.access_token no estas retornado nada si no que guardas el token, te recomiendo para esta operación uses tap, algo así:
this.auth.login("matias@platzi.com","2511").pipe(tap( token =>this.token= token.access_token),switchMap(()=>{returnthis.auth.profile(this.token)})).subscribe( user =>{this.userEmail= user.email})
private profileStore = new BehaviorSubject<User>({} as User);
profileStore$ = this.profileStore.asObservable();
`
Actualmente hice un peque{o proyecto de eccomerce y me atrevi a usar el access_token y el refresh_token en lo que esta haciendo nico... estouy usando la api fake store... la situacion es esta... hice mis validaciones, los tokens se guardan el el storage, se borran cuando le doy cerrar sesion hasta ahi bien. Lo que me vuela la cabeza y aun no he encontrado la manera es que cuando hago reload al home que es una ruta privada (personalmente lo hice asi) me saca por un moment al login y luego me deja en el home. como hago para que esto no pase? tiene que ver con el estado? agradezco su feedback con resoecto a este bug. Gracias :)
aca esta mi repo
Comparto mi solución implementando LOCALSTORAGE:
Tengo un servicio llamado tokenService donde tengo los siguientes métodos
Lo que hago es llamar el método para almacenar el token en el localStorage y además llamo el método para obtener el perfil del usuario con el fin de también almacenarlo en el localStorage.
Ya con esto lo que hago es obtener desde cualquier parte de la aplicación la información del localStorage y renderizarla.