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