Управление потоком при моем входе в систему Невидимый, чтобы получить новый токен с Http-перехватчиком и наблюдаемым
Я пытаюсь реализовать обновление входа в систему с помощью HttpInterceptor, проблема в том, что поток не является желаемым потоком. Чтобы получить новый токен, я делаю Невидимый логин с именем пользователя и паролем.
Мой перехватчик это:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let token = localStorage.getItem('TOKEN');
let clone: HttpRequest<any>;
if (token) {
let idUser = JSON.parse(this.jwtHelper.decodeToken(token).id);
if (idUser == localStorage.getItem('idUser')) {
if (this.jwtHelper.isTokenExpired(token)) {
this._up.loginInvisibleEmail().subscribe(res => {
console.log("Token Refrescado con Email");
}, error2 => {
//TODO CATCH ERROR
console.log("Error obteniendo refrescando token");
});
};
clone = request.clone({
setHeaders: {
Accept: `application/json`,
'Content-Type': `application/json`,
Authorization: `Bearer ${token}`
}
});
} else {
console.log("idUser diferentes");
this._ctp.cleanStorage();
let nav = this.app.getActiveNav();
nav.setRoot('Login');
}
}else {
console.log("Without TOKEN");
clone = request.clone({
setHeaders: {
Accept: `application/json`,
'Content-Type': `application/json`
}
});
}
console.log("HI INTERCEPTOR");
return next.handle(clone);
}
И сервис, который предоставляет мне новый токен:
loginInvisibleEmail() {
let postParams = {"email": localStorage.getItem("name"), "password": localStorage.getItem("password")};
let url = URL_SERVICIOS + "/auth";
let headers = new Headers();
headers.append('Content-Type', 'application/json');
let options = new RequestOptions({headers: headers});
return this.http2.post(url, JSON.stringify(postParams), options)
.map(resp => {
let data_resp = resp.json();
if (data_resp.error) {
this._ctp.cleanStorage();
let nav = this.app.getActiveNav();
nav.setRoot('Login');
} else {
localStorage.removeItem("TOKEN");
localStorage.setItem('TOKEN', data_resp.result['access_token']);
}
}, (error: any) => {
this._ctp.cleanStorage();
let nav = this.app.getActiveNav();
nav.setRoot('Login');
});
}
Я пытаюсь удалить элемент с помощью этого метода и с просроченным токеном, чтобы проверить поток.
deleteEducation(id): Observable<any> {
let url = URL_SERVICIOS + '/users/educative-experience/' + id;
// let headers = new HttpHeaders().set('Authorization', 'Bearer ' + localStorage.getItem('TOKEN'));
return this.http
.delete(url)
.map(resp => {
return resp['result'];
})
}
Результат потока:
Сначала нужно удалить токен обновления, в этом случае первый раз, когда я удаляю его, происходит сбой, но он обновляет токен, как на последнем шаге, если я удаляю его во второй раз, он работает хорошо, потому что токен обновлялся раньше.
Как я могу сделать это, чтобы обновить токен в первый раз?
Заранее спасибо.