-
-
Save danielcrisp/ced7d092b07efa609285ba5f0823ca60 to your computer and use it in GitHub Desktop.
import { Injectable } from '@angular/core'; | |
import { HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; | |
import { Observable } from 'rxjs/Observable'; | |
import 'rxjs/add/operator/mergeMap'; | |
import { AuthService } from './auth.service'; | |
@Injectable() | |
export class TokenInterceptor implements HttpInterceptor { | |
constructor (private auth: AuthService) {} | |
intercept (request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { | |
return this.auth.getUser() | |
.mergeMap((user: User) => { | |
if (user) { | |
// clone and modify the request | |
request = request.clone({ | |
setHeaders: { | |
Authorization: `Bearer ${user.access_token}` | |
} | |
}); | |
} | |
return next.handle(request) | |
// new | |
.do(() => { | |
// success | |
}, (err: any) => { | |
// error | |
if (err instanceof HttpErrorResponse) { | |
if (err.status === 401) { | |
// redirect user to login | |
this.auth.login(); | |
} | |
} | |
}); | |
}); | |
} | |
} |
In this way, I always get below errors. I am frustrated and don't know what should I do.... Any help is very appreciated.
Observable.js:54 RangeError: Maximum call stack size exceeded at FilterSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:56) at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/OuterSubscriber.js.OuterSubscriber.notifyError (OuterSubscriber.js:13) at InnerSubscriber.push../node_modules/rxjs/_esm5/internal/InnerSubscriber.js.InnerSubscriber._error (InnerSubscriber.js:18) at InnerSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59) at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79) at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59) at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79) at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59) at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:79) at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:59)
My package.json:
"@angular/common": "^6.0.1",
"@angular/compiler": "^6.0.1",
"@angular/core": "^6.0.1",
"rxjs": "^6.4.0",
"rxjs-compat": "^6.4.0",
Thank you! This has helped me a lot.
Somehow, this approach has an interesting side effect. The
toPromise()
on the http call does not work anymore.Has anyone an idea why?