Я пытаюсь использовать службу перехватчика JWT для аутентификации каждого звонка, который пользователь делает с API для приложения Ionic 4.У меня есть перехватчик JWT, который выглядит так
export class JwtInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
let token = 'THE_JWT_HERE'
if (token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
}
return next.handle(request);
}
}
Это работает статически, чтобы добавить токен в правильный заголовок запроса.Однако мне нужно получить фактический JWT пользователя из хранилища Ionic, которое обещано на основе.
Я подумал, что это может выглядеть примерно так:
export class JwtInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
this.authenticationService.getJWT()
.then(token => {
if (token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
}
return next.handle(request);
})
}
}
Это ломается при компиляции, потому что явозвращая обещание вместо наблюдаемого.Однако если я помещу return next.handle(request)
вне обещания, заголовок авторизации не будет добавлен.Я понимаю, почему это происходит, но я не уверен в решении.
Как я могу получить доступ к этому значению из обещания и использовать его внутри этого перехватчика?