4

I wrote an angular (4.3.6) HttpInterceptor to add some header fields, but the header doesn't get updated if I inspect them in the debugger. Any idea?

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);
    }
}
netshark1000
  • 7,245
  • 9
  • 59
  • 116
  • Setting the content-type is useless. Angular does that for you. Have you run your code using the debugger? Or just added console.log() to check that the token is set? – JB Nizet Sep 26 '17 at 05:59
  • Yes - I ran it in the debugger and see that its beeing called. But the header is not updated. See https://angular.io/guide/http#setting-new-headers – netshark1000 Sep 26 '17 at 06:02

1 Answers1

3

They are lazy. For example keys method looks like:

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

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

If you want to check them just call:

req.headers.keys()

If you want to check value you can use get or getAll method:

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

Or you can call init method from console and then you will be able to see headers in headers Map

enter image description here

Moreover when angular adds headers to request it uses forEach method that calls init method too.

yurzui
  • 205,937
  • 32
  • 433
  • 399
  • can we update those headers ... for eg In request i sent `'x-auth-token'` and if 401 occurs then I want to update headers .. Is it possible ? for more info ref : [https://stackoverflow.com/questions/48200491/request-header-is-not-updated-successfully-from-interceptor-angular-2-4-401-han] – Aakriti.G Jan 11 '18 at 10:21