Я часами ломал голову над этим, и я надеюсь, что кто-то может мне помочь и направить меня. Итак, я разрабатываю модуль аутентификации приложений Angular 7. Одним из требований является разработка перехватчика HTTP для добавления токена авторизации (JWT), а также для обработки всех сообщений об ошибках.
Я использую пакет NPM для обработки локального хранилища токенов. Этот пакет использует методы set и get для хранения и возврата обещания, а не фактического значения токена.
Теперь моя проблема заключается в моей функции перехватчика, как мы видим ниже. Я попытался прокомментировать, где я застрял.
intercept(request: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
// Trying to get the token here but this returns a promise
// this.token is a service for managing storage and retrieving of tokens
const token = this.token.getToken();
// If token is got, set it in the header
// But when i console log, i see [object promise] other than the token
if (token) {
request = request.clone({
headers: request.headers.set('Authorization', 'Bearer ' + token)
});
}
return next.handle(request).pipe(catchError(err => {
// Logs out the user if 401 error
if (err.status === 401) {
this.token.remove()
.then(() => {
this.auth.changeAuthStatus(false);
this.router.navigateByUrl('/login');
});
}
// Returns the error message for the user to see
// for example in an alert
const error = err.error.message || err.statusText;
return throwError(error);
}));
}
Надеюсь, я хорошо объяснил эту проблему. Я пытался использовать async
перед функцией перехватчика, но получаю неприятную красную ошибку, говорящую TS1055: Type 'typeof Observable' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. Types of parameters 'subscribe' and 'executor' are incompatible.
.
Буду признателен за любую помощь в решении этой проблемы.
Благодарю вас!