У меня есть простой перехватчик, используемый для добавления токена jwt к каждому запросу (кроме запроса, используемого для обновления токена).Чтобы восстановить токен, мне нужно вызвать метод "getSession", который возвращает сеанс в обратном вызове и который отвечает за обновление токена, когда это необходимо.
Когда токен jwt все еще действует, все работает нормально: токен извлекается и добавляется в запрос, но когда токен необходимо обновить методом getSession, у меня возникает ошибка, и запрос не отправляется.
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req.url.includes('cognito-idp')) {
// Request token request does not need a token
return next.handle(req);
} else {
console.log('get session');
return this.cognitoUtil.getCurrentUser().getSession((err, session) => {
console.log('in get session callback');
if (err) {
console.log('Problem to get the session:' + err);
this.logoutUser();
return Observable.throw(err);
} else {
console.log('We have the session...');
if (session.isValid()) {
console.log('...and session is valid');
const token = session.getIdToken().getJwtToken();
const requestWithToken = req.clone({
setHeaders: {
'Content-Type': 'application/json',
'Authorization': token
}
});
console.log('return the session with the token: ' + token);
return next.handle(requestWithToken);
} else {
console.log('... but session is not valid');
this.logoutUser();
return Observable.throw(err);
}
}
});
}
}
Журналы, когда токен по-прежнемуvalid:
get session
in get session callback
We have the session...
...and session is valid
return the session with the token: eyJraW...
Журналы, когда токен обновляется методом getSession:
get session
core.js:15724 ERROR Error: Uncaught (in promise): TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (subscribeTo.js:28)
at subscribeToResult (subscribeToResult.js:15)
at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._innerSub (mergeMap.js:74)
(...)
in get session callback
We have the session...
...and session is valid
return the session with the token: eyJra...
У вас есть какие-либо идеи по этому поводу?У меня складывается впечатление, что перехват не ждет возврата нового токена методом getSession