1
我想写我的第一个代码来使用HttpInterceptor来捕获401错误。我想要做的是根据条件创建一个新的认证令牌,然后重试。但是,目前我的代码会重试,但它会在创建新的身份验证令牌之前进行重试。这里是我的代码:Angular 4.3中的HttpInterceptor重试
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
return next.handle(request).catch(error => {
if (error.status === 401) {
console.log('401 error');
//check for valid refresh token
let refreshToken = localStorage.getItem('refresh_token');
this._refreshTokenService.getRefreshToken(refreshToken).subscribe(
refreshToken => {
if (refreshToken != null) {
console.log('valid refresh token')
//if valid refresh token, relogin and create new auth token
console.log(localStorage.getItem('auth_token'));
this._userService.logout();
let email = localStorage.getItem('profile_email');
this._userService.autoLogin(email)
.subscribe(
result => {
if (result) {
console.log('new auth token created');
let auth_token = localStorage.getItem('auth_token');
//retry
request = request.clone({ headers: request.headers.set('Authorization', `Bearer ${auth_token}`) });
}
});
}
else {
console.log('invalid refresh token');
}
});
return next.handle(request);
}
else {
console.log(error.status);
}
});
}
我仍然得到熟悉打字稿语法,我想我需要做出新的令牌创建后重试才会出现,但我不知道确切的语法在这案件。任何帮助将非常感激!
您好,感谢您的回复。我试着移动'return next.handle(request)'这一行,以便它直接在克隆行之后,但是这给了我语法错误'Type void不能分配给类型ObservableInput'。我想我需要在原始文章中包含返回行,但是如何在代码的其余部分运行完之前阻止其运行? –
user517406
另外我尝试了你的例子,它给出错误'类型订阅不可分配类型ObservableInput'。这可能不是很难解决,但语法很难让我的头:) –
user517406