angular 6 interceptor is called after request is sent











up vote
1
down vote

favorite












I'm working on an angular 6 app where I want to add an jwt-token to the authorize-header of every request. For this scenario I want to use an interceptor.



The code looks like this:






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

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let sessionId = localStorage.getItem('sessionId');
if (sessionId) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${sessionId}`
}
});

console.log("With AuthHeader");
}

return next.handle(request);
}
}





Here is my code for sending the request:






  httpQuery(ressource): Observable<T> {
var absoluteUrl = this.getAbsoluteUrl(ressource);
console.log("Sending");
return this.httpClient
.get<T>(absoluteUrl);
}





However I face the following problem:
The interceptor gets fired, but AFTER the request is sent. I can see this in developer console where the log-message from the http-method comes right before the log-message from the interceptor:
enter image description here



As you can see, this leeds to a 401 response from the server which expects the authorization-header.



I read a ton of tutorials and stackoverflow-questions about interceptor, but I can't see my mistake.



Maybe some of guys have a hint for me?



Thank you and best regards,
Alex










share|improve this question






















  • Please check your network tab for the request where the Authorization header is added or not.
    – Sheik Althaf
    Nov 20 at 13:47










  • I did and it is not sent (with different browsers). Interesting side note: fiddler doesn't notice this particular request at all. Every request I make is captured by fiddler, but this one request which results in a 401-response not. Only Wireshark captures this request and the response. And in Wireshark there is no authorization-header as well.
    – Alex
    Nov 20 at 13:55















up vote
1
down vote

favorite












I'm working on an angular 6 app where I want to add an jwt-token to the authorize-header of every request. For this scenario I want to use an interceptor.



The code looks like this:






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

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let sessionId = localStorage.getItem('sessionId');
if (sessionId) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${sessionId}`
}
});

console.log("With AuthHeader");
}

return next.handle(request);
}
}





Here is my code for sending the request:






  httpQuery(ressource): Observable<T> {
var absoluteUrl = this.getAbsoluteUrl(ressource);
console.log("Sending");
return this.httpClient
.get<T>(absoluteUrl);
}





However I face the following problem:
The interceptor gets fired, but AFTER the request is sent. I can see this in developer console where the log-message from the http-method comes right before the log-message from the interceptor:
enter image description here



As you can see, this leeds to a 401 response from the server which expects the authorization-header.



I read a ton of tutorials and stackoverflow-questions about interceptor, but I can't see my mistake.



Maybe some of guys have a hint for me?



Thank you and best regards,
Alex










share|improve this question






















  • Please check your network tab for the request where the Authorization header is added or not.
    – Sheik Althaf
    Nov 20 at 13:47










  • I did and it is not sent (with different browsers). Interesting side note: fiddler doesn't notice this particular request at all. Every request I make is captured by fiddler, but this one request which results in a 401-response not. Only Wireshark captures this request and the response. And in Wireshark there is no authorization-header as well.
    – Alex
    Nov 20 at 13:55













up vote
1
down vote

favorite









up vote
1
down vote

favorite











I'm working on an angular 6 app where I want to add an jwt-token to the authorize-header of every request. For this scenario I want to use an interceptor.



The code looks like this:






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

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let sessionId = localStorage.getItem('sessionId');
if (sessionId) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${sessionId}`
}
});

console.log("With AuthHeader");
}

return next.handle(request);
}
}





Here is my code for sending the request:






  httpQuery(ressource): Observable<T> {
var absoluteUrl = this.getAbsoluteUrl(ressource);
console.log("Sending");
return this.httpClient
.get<T>(absoluteUrl);
}





However I face the following problem:
The interceptor gets fired, but AFTER the request is sent. I can see this in developer console where the log-message from the http-method comes right before the log-message from the interceptor:
enter image description here



As you can see, this leeds to a 401 response from the server which expects the authorization-header.



I read a ton of tutorials and stackoverflow-questions about interceptor, but I can't see my mistake.



Maybe some of guys have a hint for me?



Thank you and best regards,
Alex










share|improve this question













I'm working on an angular 6 app where I want to add an jwt-token to the authorize-header of every request. For this scenario I want to use an interceptor.



The code looks like this:






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

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let sessionId = localStorage.getItem('sessionId');
if (sessionId) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${sessionId}`
}
});

console.log("With AuthHeader");
}

return next.handle(request);
}
}





Here is my code for sending the request:






  httpQuery(ressource): Observable<T> {
var absoluteUrl = this.getAbsoluteUrl(ressource);
console.log("Sending");
return this.httpClient
.get<T>(absoluteUrl);
}





However I face the following problem:
The interceptor gets fired, but AFTER the request is sent. I can see this in developer console where the log-message from the http-method comes right before the log-message from the interceptor:
enter image description here



As you can see, this leeds to a 401 response from the server which expects the authorization-header.



I read a ton of tutorials and stackoverflow-questions about interceptor, but I can't see my mistake.



Maybe some of guys have a hint for me?



Thank you and best regards,
Alex






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

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let sessionId = localStorage.getItem('sessionId');
if (sessionId) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${sessionId}`
}
});

console.log("With AuthHeader");
}

return next.handle(request);
}
}





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

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let sessionId = localStorage.getItem('sessionId');
if (sessionId) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${sessionId}`
}
});

console.log("With AuthHeader");
}

return next.handle(request);
}
}





  httpQuery(ressource): Observable<T> {
var absoluteUrl = this.getAbsoluteUrl(ressource);
console.log("Sending");
return this.httpClient
.get<T>(absoluteUrl);
}





  httpQuery(ressource): Observable<T> {
var absoluteUrl = this.getAbsoluteUrl(ressource);
console.log("Sending");
return this.httpClient
.get<T>(absoluteUrl);
}






angular interceptor angular-http-interceptors






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 at 13:31









Alex

79346




79346












  • Please check your network tab for the request where the Authorization header is added or not.
    – Sheik Althaf
    Nov 20 at 13:47










  • I did and it is not sent (with different browsers). Interesting side note: fiddler doesn't notice this particular request at all. Every request I make is captured by fiddler, but this one request which results in a 401-response not. Only Wireshark captures this request and the response. And in Wireshark there is no authorization-header as well.
    – Alex
    Nov 20 at 13:55


















  • Please check your network tab for the request where the Authorization header is added or not.
    – Sheik Althaf
    Nov 20 at 13:47










  • I did and it is not sent (with different browsers). Interesting side note: fiddler doesn't notice this particular request at all. Every request I make is captured by fiddler, but this one request which results in a 401-response not. Only Wireshark captures this request and the response. And in Wireshark there is no authorization-header as well.
    – Alex
    Nov 20 at 13:55
















Please check your network tab for the request where the Authorization header is added or not.
– Sheik Althaf
Nov 20 at 13:47




Please check your network tab for the request where the Authorization header is added or not.
– Sheik Althaf
Nov 20 at 13:47












I did and it is not sent (with different browsers). Interesting side note: fiddler doesn't notice this particular request at all. Every request I make is captured by fiddler, but this one request which results in a 401-response not. Only Wireshark captures this request and the response. And in Wireshark there is no authorization-header as well.
– Alex
Nov 20 at 13:55




I did and it is not sent (with different browsers). Interesting side note: fiddler doesn't notice this particular request at all. Every request I make is captured by fiddler, but this one request which results in a 401-response not. Only Wireshark captures this request and the response. And in Wireshark there is no authorization-header as well.
– Alex
Nov 20 at 13:55












2 Answers
2






active

oldest

votes

















up vote
0
down vote













What you are showing is just fine



console.log("Sending"); //here you print to the cosole
return this.httpClient // here you actually MAKE http call.
.get<T>(absoluteUrl);


So your interceptor is called DURING request execution and BEFORE actual XHR request is made.






share|improve this answer





















  • Thank you for the replay. As you can see in the screenshot, the error (which occurs because of the 401 response from the server) is catched BEFORE the interceptor is executed, too. And also, apart from the log, the authorization-header not gets sent whith the request...
    – Alex
    Nov 20 at 13:38










  • No, this is just how browser console works. Order of printout is not guaranteed and might be delayed in case of objects (exception here). I faces similar wtf issue in the past.
    – Antoniossss
    Nov 20 at 13:42












  • This may be true but as I said, apart from the log it doesn't work
    – Alex
    Nov 20 at 13:45










  • And that is the different part of story. You can see in the broser what kind of request is actually made and you will see that probably bearer is there.
    – Antoniossss
    Nov 20 at 14:00










  • I checked the actual request in the network-tab of different browsers as well as in wireshark and I can say, there is no authorization-header
    – Alex
    Nov 20 at 14:03


















up vote
0
down vote













Please try like this one



const headers = request.headers.append('Authorization', `Bearer ${sessionId}`);
const d = request.clone({ headers: headers });

return next.handle(request);





share|improve this answer





















  • Thanks for the reply. I tried this but it doesn't work
    – Alex
    Nov 20 at 14:41











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53394140%2fangular-6-interceptor-is-called-after-request-is-sent%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
0
down vote













What you are showing is just fine



console.log("Sending"); //here you print to the cosole
return this.httpClient // here you actually MAKE http call.
.get<T>(absoluteUrl);


So your interceptor is called DURING request execution and BEFORE actual XHR request is made.






share|improve this answer





















  • Thank you for the replay. As you can see in the screenshot, the error (which occurs because of the 401 response from the server) is catched BEFORE the interceptor is executed, too. And also, apart from the log, the authorization-header not gets sent whith the request...
    – Alex
    Nov 20 at 13:38










  • No, this is just how browser console works. Order of printout is not guaranteed and might be delayed in case of objects (exception here). I faces similar wtf issue in the past.
    – Antoniossss
    Nov 20 at 13:42












  • This may be true but as I said, apart from the log it doesn't work
    – Alex
    Nov 20 at 13:45










  • And that is the different part of story. You can see in the broser what kind of request is actually made and you will see that probably bearer is there.
    – Antoniossss
    Nov 20 at 14:00










  • I checked the actual request in the network-tab of different browsers as well as in wireshark and I can say, there is no authorization-header
    – Alex
    Nov 20 at 14:03















up vote
0
down vote













What you are showing is just fine



console.log("Sending"); //here you print to the cosole
return this.httpClient // here you actually MAKE http call.
.get<T>(absoluteUrl);


So your interceptor is called DURING request execution and BEFORE actual XHR request is made.






share|improve this answer





















  • Thank you for the replay. As you can see in the screenshot, the error (which occurs because of the 401 response from the server) is catched BEFORE the interceptor is executed, too. And also, apart from the log, the authorization-header not gets sent whith the request...
    – Alex
    Nov 20 at 13:38










  • No, this is just how browser console works. Order of printout is not guaranteed and might be delayed in case of objects (exception here). I faces similar wtf issue in the past.
    – Antoniossss
    Nov 20 at 13:42












  • This may be true but as I said, apart from the log it doesn't work
    – Alex
    Nov 20 at 13:45










  • And that is the different part of story. You can see in the broser what kind of request is actually made and you will see that probably bearer is there.
    – Antoniossss
    Nov 20 at 14:00










  • I checked the actual request in the network-tab of different browsers as well as in wireshark and I can say, there is no authorization-header
    – Alex
    Nov 20 at 14:03













up vote
0
down vote










up vote
0
down vote









What you are showing is just fine



console.log("Sending"); //here you print to the cosole
return this.httpClient // here you actually MAKE http call.
.get<T>(absoluteUrl);


So your interceptor is called DURING request execution and BEFORE actual XHR request is made.






share|improve this answer












What you are showing is just fine



console.log("Sending"); //here you print to the cosole
return this.httpClient // here you actually MAKE http call.
.get<T>(absoluteUrl);


So your interceptor is called DURING request execution and BEFORE actual XHR request is made.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 20 at 13:33









Antoniossss

14.9k12152




14.9k12152












  • Thank you for the replay. As you can see in the screenshot, the error (which occurs because of the 401 response from the server) is catched BEFORE the interceptor is executed, too. And also, apart from the log, the authorization-header not gets sent whith the request...
    – Alex
    Nov 20 at 13:38










  • No, this is just how browser console works. Order of printout is not guaranteed and might be delayed in case of objects (exception here). I faces similar wtf issue in the past.
    – Antoniossss
    Nov 20 at 13:42












  • This may be true but as I said, apart from the log it doesn't work
    – Alex
    Nov 20 at 13:45










  • And that is the different part of story. You can see in the broser what kind of request is actually made and you will see that probably bearer is there.
    – Antoniossss
    Nov 20 at 14:00










  • I checked the actual request in the network-tab of different browsers as well as in wireshark and I can say, there is no authorization-header
    – Alex
    Nov 20 at 14:03


















  • Thank you for the replay. As you can see in the screenshot, the error (which occurs because of the 401 response from the server) is catched BEFORE the interceptor is executed, too. And also, apart from the log, the authorization-header not gets sent whith the request...
    – Alex
    Nov 20 at 13:38










  • No, this is just how browser console works. Order of printout is not guaranteed and might be delayed in case of objects (exception here). I faces similar wtf issue in the past.
    – Antoniossss
    Nov 20 at 13:42












  • This may be true but as I said, apart from the log it doesn't work
    – Alex
    Nov 20 at 13:45










  • And that is the different part of story. You can see in the broser what kind of request is actually made and you will see that probably bearer is there.
    – Antoniossss
    Nov 20 at 14:00










  • I checked the actual request in the network-tab of different browsers as well as in wireshark and I can say, there is no authorization-header
    – Alex
    Nov 20 at 14:03
















Thank you for the replay. As you can see in the screenshot, the error (which occurs because of the 401 response from the server) is catched BEFORE the interceptor is executed, too. And also, apart from the log, the authorization-header not gets sent whith the request...
– Alex
Nov 20 at 13:38




Thank you for the replay. As you can see in the screenshot, the error (which occurs because of the 401 response from the server) is catched BEFORE the interceptor is executed, too. And also, apart from the log, the authorization-header not gets sent whith the request...
– Alex
Nov 20 at 13:38












No, this is just how browser console works. Order of printout is not guaranteed and might be delayed in case of objects (exception here). I faces similar wtf issue in the past.
– Antoniossss
Nov 20 at 13:42






No, this is just how browser console works. Order of printout is not guaranteed and might be delayed in case of objects (exception here). I faces similar wtf issue in the past.
– Antoniossss
Nov 20 at 13:42














This may be true but as I said, apart from the log it doesn't work
– Alex
Nov 20 at 13:45




This may be true but as I said, apart from the log it doesn't work
– Alex
Nov 20 at 13:45












And that is the different part of story. You can see in the broser what kind of request is actually made and you will see that probably bearer is there.
– Antoniossss
Nov 20 at 14:00




And that is the different part of story. You can see in the broser what kind of request is actually made and you will see that probably bearer is there.
– Antoniossss
Nov 20 at 14:00












I checked the actual request in the network-tab of different browsers as well as in wireshark and I can say, there is no authorization-header
– Alex
Nov 20 at 14:03




I checked the actual request in the network-tab of different browsers as well as in wireshark and I can say, there is no authorization-header
– Alex
Nov 20 at 14:03












up vote
0
down vote













Please try like this one



const headers = request.headers.append('Authorization', `Bearer ${sessionId}`);
const d = request.clone({ headers: headers });

return next.handle(request);





share|improve this answer





















  • Thanks for the reply. I tried this but it doesn't work
    – Alex
    Nov 20 at 14:41















up vote
0
down vote













Please try like this one



const headers = request.headers.append('Authorization', `Bearer ${sessionId}`);
const d = request.clone({ headers: headers });

return next.handle(request);





share|improve this answer





















  • Thanks for the reply. I tried this but it doesn't work
    – Alex
    Nov 20 at 14:41













up vote
0
down vote










up vote
0
down vote









Please try like this one



const headers = request.headers.append('Authorization', `Bearer ${sessionId}`);
const d = request.clone({ headers: headers });

return next.handle(request);





share|improve this answer












Please try like this one



const headers = request.headers.append('Authorization', `Bearer ${sessionId}`);
const d = request.clone({ headers: headers });

return next.handle(request);






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 20 at 14:02









Sheik Althaf

24217




24217












  • Thanks for the reply. I tried this but it doesn't work
    – Alex
    Nov 20 at 14:41


















  • Thanks for the reply. I tried this but it doesn't work
    – Alex
    Nov 20 at 14:41
















Thanks for the reply. I tried this but it doesn't work
– Alex
Nov 20 at 14:41




Thanks for the reply. I tried this but it doesn't work
– Alex
Nov 20 at 14:41


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53394140%2fangular-6-interceptor-is-called-after-request-is-sent%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Feedback on college project

Futebolista

Albești (Vaslui)