【发布时间】:2019-02-19 22:33:24
【问题描述】:
我正在尝试使用 JWT 拦截器服务来验证用户对 Ionic 4 应用程序 API 的每次调用。 我有一个看起来像这样的 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);
}
}
这可以静态地将令牌添加到请求的正确标头中。但是,我需要从基于承诺的 Ionic 存储中获取用户的实际 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
this.authenticationService.getJWT()
.then(token => {
if (token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
}
return next.handle(request);
})
}
}
这在编译时中断,因为我返回的是一个承诺,而不是一个可观察的。
但是,如果我将 return next.handle(request) 放在承诺之外,则不会添加授权标头。我明白为什么会发生这种情况,但我不确定解决方案。
如何从 Promise 中访问该值并在此拦截器中使用它?
【问题讨论】:
标签: angular promise observable angular7 ionic4