Búsqueda de sitios web

typescript - ¿Cómo eliminar un encabezado por un nombre dado en Angular?


En mi aplicación, estoy realizando múltiples solicitudes HTTP. Todas ellas necesitan un encabezado de autenticación con un token de acceso (y algunos otros valores de encabezado). Definí una variable de encabezado de tipo HttpHeaders (ver código#1) para usarla como this.http.get(this.myUrl, { headers: this.headers}).
En mi caso, el token debe actualizarse con el tiempo y quiero cambiar el encabezado para que contenga el token más reciente.

En mi código, tengo una función de actualización que debería actualizar el token y reemplazar el token antiguo en el encabezado HTTP con el nuevo.
Mi primer enfoque fue usar el método set() proporcionado (ver código#2). Esto añadió un nuevo valor al encabezado y no lo reemplazó (ahora tenía dos valores de Authorization).
Mi segundo enfoque fue usar el método delete() (ver código#3) y eliminar Authorization y luego usar el método append() con uno nuevo. Esto causó un resultado similar.
Mi último enfoque fue simplemente usar el método delete() (ver código#4).

ejemplos de código

código#1:

headers = new HttpHeaders()
  .set('Content-Type', 'application/json')
  .set('Accept', 'application/json');

código#2:

this.headers = this.headers
  .set('Authorization', 'Bearer ' + access_token);

código#3:

this.headers = this.headers.delete('Authorization');
this.headers = this.headers.append('Authorization','Bearer ' + access_token);

código#4:

this.headers = this.headers.delete('Authorization','Bearer ' + access_token);

resultados

Esperaba que el valor del encabezado ({'Authorization', 'Bearer ' + access_token}) se reemplazara (primer enfoque). El resultado real fue que simplemente se añadió:

{"Authorization", "Bearer access_token-old"}
{"Authorization", "Bearer access_token-new"}

Y para el segundo enfoque, esperaba eliminar y añadir un nuevo valor, lo que provocó que todavía se añadieran dos valores:

{"Authorization", undefined}
{"Authorization", "Bearer access_token-new"}

Mi último enfoque causó la misma salida que en mi primer enfoque, en lugar de solo reemplazar el valor.

¿Conoces algún método para simplemente reemplazar el access_token/valor en {'Authorization','Bearer ' + access_token}?

Respuesta #1

Prueba esto

let headers: HttpHeaders = new HttpHeaders();
headers = headers.set('Accept', 'application/json');
headers = headers.set('Accept', 'application/json');
headers = headers.set('Authorization', `Bearer ${access_token}`);

Respuesta #2

Logré encontrar una solución fácil para adaptarla a mi caso:

  1. Estoy definiendo el encabezado:
headers = new HttpHeaders()
  .set('Content-Type', 'application/json')
  .set('Accept', 'application/json');
  1. Cada vez que necesito actualizar el token, hago esto:
this.headers = new HttpHeaders()
  .set('Content-Type', 'application/json')
  .set('Accept', 'application/json')
  .set('Authorization', 'Bearer ' + access_token');

Pero si alguien tiene una idea de cómo hacerlo con set(), append(), delete(), etc., me encantaría escucharla.