HttpInterceptor detect 401 responses
up vote
0
down vote
favorite
I had a working code that called a logout() method in case of a 401 response from the server. As I have upgraded Angular from 5.2 to 7.0.3 it is not working anymore. I think it must be something with a modified HttpInterceptor interface or the many rxjs breaking changes. Right now it looks like this and throws the error below the code.
export class UnauthInterceptor implements HttpInterceptor {
private session: SessionProvider;
constructor(private injector:Injector) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.session = this.injector.get(SessionProvider);
return next.handle(request).pipe(catchError(err => {
if (err.status === 401) {
// auto logout if 401 response returned from api
this.session.logout();
}
})
);
}}
tsc throws the following error:
src/app/interceptors/unauth.interceptor.ts:19:51 - error TS2345:
Argument of type '(err: any) => void' is not assignable to parameter
of type '(err: any, caught: Observable>) =>
ObservableInput<{}>'.
Type 'void' is not assignable to type 'ObservableInput<{}>'.
19 return next.handle(request).pipe(catchError(err => {
angular typescript rxjs
add a comment |
up vote
0
down vote
favorite
I had a working code that called a logout() method in case of a 401 response from the server. As I have upgraded Angular from 5.2 to 7.0.3 it is not working anymore. I think it must be something with a modified HttpInterceptor interface or the many rxjs breaking changes. Right now it looks like this and throws the error below the code.
export class UnauthInterceptor implements HttpInterceptor {
private session: SessionProvider;
constructor(private injector:Injector) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.session = this.injector.get(SessionProvider);
return next.handle(request).pipe(catchError(err => {
if (err.status === 401) {
// auto logout if 401 response returned from api
this.session.logout();
}
})
);
}}
tsc throws the following error:
src/app/interceptors/unauth.interceptor.ts:19:51 - error TS2345:
Argument of type '(err: any) => void' is not assignable to parameter
of type '(err: any, caught: Observable>) =>
ObservableInput<{}>'.
Type 'void' is not assignable to type 'ObservableInput<{}>'.
19 return next.handle(request).pipe(catchError(err => {
angular typescript rxjs
You have to return an Observable fromcatchError
– martin
Nov 12 at 14:42
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I had a working code that called a logout() method in case of a 401 response from the server. As I have upgraded Angular from 5.2 to 7.0.3 it is not working anymore. I think it must be something with a modified HttpInterceptor interface or the many rxjs breaking changes. Right now it looks like this and throws the error below the code.
export class UnauthInterceptor implements HttpInterceptor {
private session: SessionProvider;
constructor(private injector:Injector) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.session = this.injector.get(SessionProvider);
return next.handle(request).pipe(catchError(err => {
if (err.status === 401) {
// auto logout if 401 response returned from api
this.session.logout();
}
})
);
}}
tsc throws the following error:
src/app/interceptors/unauth.interceptor.ts:19:51 - error TS2345:
Argument of type '(err: any) => void' is not assignable to parameter
of type '(err: any, caught: Observable>) =>
ObservableInput<{}>'.
Type 'void' is not assignable to type 'ObservableInput<{}>'.
19 return next.handle(request).pipe(catchError(err => {
angular typescript rxjs
I had a working code that called a logout() method in case of a 401 response from the server. As I have upgraded Angular from 5.2 to 7.0.3 it is not working anymore. I think it must be something with a modified HttpInterceptor interface or the many rxjs breaking changes. Right now it looks like this and throws the error below the code.
export class UnauthInterceptor implements HttpInterceptor {
private session: SessionProvider;
constructor(private injector:Injector) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.session = this.injector.get(SessionProvider);
return next.handle(request).pipe(catchError(err => {
if (err.status === 401) {
// auto logout if 401 response returned from api
this.session.logout();
}
})
);
}}
tsc throws the following error:
src/app/interceptors/unauth.interceptor.ts:19:51 - error TS2345:
Argument of type '(err: any) => void' is not assignable to parameter
of type '(err: any, caught: Observable>) =>
ObservableInput<{}>'.
Type 'void' is not assignable to type 'ObservableInput<{}>'.
19 return next.handle(request).pipe(catchError(err => {
angular typescript rxjs
angular typescript rxjs
asked Nov 12 at 14:35
Perrier
9012930
9012930
You have to return an Observable fromcatchError
– martin
Nov 12 at 14:42
add a comment |
You have to return an Observable fromcatchError
– martin
Nov 12 at 14:42
You have to return an Observable from
catchError
– martin
Nov 12 at 14:42
You have to return an Observable from
catchError
– martin
Nov 12 at 14:42
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
Hello you have to return an observable with catchError like :
return throwError(error)
Thanks. Btw vscode still complains about some strange errors but tsc runs without error.
– Perrier
Nov 12 at 14:58
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53264381%2fhttpinterceptor-detect-401-responses%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
Hello you have to return an observable with catchError like :
return throwError(error)
Thanks. Btw vscode still complains about some strange errors but tsc runs without error.
– Perrier
Nov 12 at 14:58
add a comment |
up vote
2
down vote
accepted
Hello you have to return an observable with catchError like :
return throwError(error)
Thanks. Btw vscode still complains about some strange errors but tsc runs without error.
– Perrier
Nov 12 at 14:58
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
Hello you have to return an observable with catchError like :
return throwError(error)
Hello you have to return an observable with catchError like :
return throwError(error)
answered Nov 12 at 14:40
Constantin Guidon
997617
997617
Thanks. Btw vscode still complains about some strange errors but tsc runs without error.
– Perrier
Nov 12 at 14:58
add a comment |
Thanks. Btw vscode still complains about some strange errors but tsc runs without error.
– Perrier
Nov 12 at 14:58
Thanks. Btw vscode still complains about some strange errors but tsc runs without error.
– Perrier
Nov 12 at 14:58
Thanks. Btw vscode still complains about some strange errors but tsc runs without error.
– Perrier
Nov 12 at 14:58
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53264381%2fhttpinterceptor-detect-401-responses%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
You have to return an Observable from
catchError
– martin
Nov 12 at 14:42