【发布时间】:2019-03-21 18:31:49
【问题描述】:
这里是AuthInterceptor:
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private authService: AuthService) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const Token = this.authService.getToken();
if (!Token) {
return next.handle(req);
}
// Refresh Token first
if (Token.expiresRefreshToken && Number(Token.expiresRefreshToken) < Date.now()) {
this.authService.refreshTokenRefresh(Token.tokenref)
.subscribe((response) => {
localStorage.setItem('tokenref', response.tokenref);
localStorage.setItem('tokenrefexp', response.tokenrefexp);
});
}
// Then next Access Token
if (Token.expiresToken && Number(Token.expiresToken) < Date.now()) {
this.authService.refreshToken(Token.tokenref)
.subscribe((response) => {
localStorage.setItem('token', response.token);
localStorage.setItem('tokenexp', response.tokenexp);
});
}
// Original request with updated custom headers
return next.handle(req.clone({
headers: req.headers
.set('Authorization', 'Bearer ' + localStorage.getItem('token'))
.set('X-Auth-Provider', localStorage.getItem('provider'))
}));
}
}
我需要在发送请求之前评估这些条件,因为在方法 refreshToken 和 refreshTokenRefresh 之后某些自定义标头可能会发生变化。有没有办法评估 RxJS 运算符中的所有内容?第一个条件 (refreshTokenRefresh),然后是第二个条件 (refreshToken),最后是 req。
更新:我收到此错误:RangeError: Maximum call stack size exceeded. 如何解决此问题?
【问题讨论】:
-
只需将代码的最后一部分放入
else并将next.handle放入您的ifs 中。
标签: javascript angular typescript rxjs angular-http-interceptors