Мне нужно отреагировать (в классе перехватчика) на 403 Запрещенный статус HTTP (для получения / обновления) токена JWT и повторить запрос со свежим токеном.
В приведенном ниже коде, когда сервер возвращает ответ с ошибкой, он переходит к обратному вызову успеха (а не к обратному вызову ошибки, как я ожидаю), а событие - это объект typeof (который бесполезен в реакции на ответ об ошибке). Объект события выглядит так: {type: 0}.
Вопрос:
-Как правильно обрабатывать httpErrorResponse (403 Forbidden) в HttpInterceptor, когда мне нужно обновить accessToken и повторить HTTP-запрос?
import {
HttpInterceptor,
HttpRequest,
HttpResponse,
HttpHandler,
HttpEvent
} from '@angular/common/http';
import 'rxjs/add/operator/map';
@Injectable()
class JWTInterceptor implements HttpInterceptor {
constructor(private tokenService: TokenService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let myHeaders = req.headers;
if (this.tokenService.accessToken) {
myHeaders = myHeaders.append('Authorization',`${this.tokenService.accessToken.token_type} ${this.tokenService.accessToken.access_token}`)
}
const authReq = req.clone({headers: myHeaders});
return next.handle(authReq).map((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
// success callback
}
}, (err: any) => {
if (err instanceof HttpErrorResponse {
if (err.status === 403) {
// error callback
this.tokenService.obtainAccessToken()
}
}
})
.retry(1);
}
}