Дело в том, что при вызове службы в бэкэнде, и если я получаю код ошибки, это указывает на то, что срок его действия истек, тогда во внешнем интерфейсе. Сначала: запросите действительный токен jwt.Второе: повторно запросить исходный http-запрос после получения действительного токена.Первый шаг сделан успешно, но это не так во втором.Это код перехватчика
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (!request.url.endsWith('login') && !request.url.endsWith('refreshtoken')) {
request = this.addAuthenticationToken(request);
}
return next.handle(request).pipe(catchError(err => {
Log.log("Error Status: " + err.status);
// invalid token or bad request
if (err.status == this.NOT_VALID_TOKEN_OR_BAD_REQUEST_ERROR_CODE) {
this.authenticationService.logOut();
return EMPTY;
}
else if (err.status == this.TOKEN_EXPIRED_ERROR_CODE) { // token is expired
this. doRefreshToken(request, next);
}
}
));
}
doRefreshToken(request, next) {
return this.authenticationService.refreshToken().subscribe((resp: HttpResponse<any>) => {
Log.log("in subscripe refresh token")
Log.log(resp.headers.get(this.AUTH_HEADER));
StorageManagementUtil.setLocaltStorage(resp.headers.get(this.AUTH_HEADER), <PortalRsponseTransaction>resp.body);
},
(error) => { Log.log(error) },
() => {
Log.log("on complete()")
request = this.addAuthenticationToken(request);
return next.handle(request);
});
}
А это служба обновления токенов
refreshToken() {
let map = new TSMap();
map.set(this.RQUEST_BODY_KEY_SESSION_TOKEN, StorageManagementUtil.readFromLocalStorage(StorageManagementUtil.SESSION_TOKEN));
var requsetBody = JSON.stringify(map.toJSON());
let request = new PortalRequestTransaction(requsetBody);
return this.http.post<PortalRsponseTransaction>(fullURL, request, {
observe: 'response',
responseType: 'json'
});
}
А это скриншот из сетевого крана при проверке
https://i.ibb.co/vqLTLh2/1.png
Вопрос в том, почему не вызывается исходный сервис после получения токена обновления?И почему услуга звонка осуществляется дважды?(если мы игнорируем параметры типа запроса OPTIONS).
Я новичок в изучении угловых вопросов, поэтому мне хотелось бы предоставить достаточно информации для выяснения проблемы.