2017-09-26 4 views
1

J'ai écrit un HttpInterceptor angulaire (4.3.6) pour ajouter des champs d'en-tête, mais l'en-tête n'est pas mis à jour si je les inspecte dans le débogueur. Une idée?Angulaire HttpInterceptor ne changeant pas d'en-tête

import {Injectable} from '@angular/core'; 
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http'; 
import {Observable} from 'rxjs/Observable'; 

@Injectable() 
export class AuthInterceptor implements HttpInterceptor { 


    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 

     console.log('AuthInterceptor at work'); 

     const contentTypeReq = req.clone({ 
      headers: req.headers.set('Content-Type', 'application/json') 
     }); 

     const token = localStorage.getItem('token'); 
     if (token) { 
      const authReq = contentTypeReq.clone({ 
       headers: req.headers.set('Authorization', 'Bearer ' + token) 
      }); 
      return next.handle(authReq); 
     } 

     // Pass on the cloned request instead of the original request. 
     return next.handle(contentTypeReq); 
    } 
} 
+0

La définition du type de contenu est inutile. Angular fait cela pour vous. Avez-vous exécuté votre code en utilisant le débogueur? Ou juste ajouté console.log() pour vérifier que le jeton est défini? –

+0

Oui - Je l'ai couru dans le débogueur et voir que son appel est appelé. Mais l'en-tête n'est pas mis à jour. Voir https://angular.io/guide/http#setting-new-headers – netshark1000

Répondre

0

Ils sont paresseux. Par exemple keys method ressemble:

keys(): string[] { 
    this.init(); <== initialize 

    return Array.from(this.normalizedNames.values()); 
} 

Si vous voulez les vérifier simplement appeler:

req.headers.keys() 

Si vous voulez vérifier la valeur que vous pouvez utiliser la méthode get ou getAll:

req.headers.getAll('Content-Type') 

Ou vous pouvez appeler init méthode à partir de la console, puis vous serez en mesure de se les en-têtes e dans headers Carte

enter image description here

En outre, lorsque angular adds headers to request il utilise la méthode forEach qui appelle aussi la méthode init.

+0

pouvons-nous mettre à jour ces en-têtes ... par exemple Dans la demande j'ai envoyé '' x-auth-token'' et si 401 se produit alors je veux mettre à jour les en-têtes .. Est-ce possible? pour plus d'informations ref: [https://stackoverflow.com/questions/48200491/request-header-is-not-updated-successfully-from-interceptor-angular-2-4-401-han] –