【发布时间】:2018-08-21 16:26:34
【问题描述】:
我正在尝试使用 Angular5 实现 HttpInterceptor 在所有 HTTP 请求中注入 Authorization 标头。
我依靠第三方库(ADAL,这里称为 AuthService)公开了一个 acquireToken() 方法来获取用于承载授权的令牌。
问题是 aquireToken() 返回一个 observable,我必须订阅才能获得我需要的真实字符串。
因此,我的代码从不注入标头,我想是因为next.handle() 在acquireToken() 返回任何值之前执行。
如何确保仅在检索到令牌后才调用下一个处理程序?
import { Injectable, Injector } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import {AuthService} from 'mylibrary';
@Injectable()
export class MyInterceptor implements HttpInterceptor {
constructor(private auth: AuthService) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let headers = req.headers || new HttpHeaders();
this.auth.acquireToken(req.url)
.subscribe((token: string) => {
headers = headers.append('Authorization', 'Bearer ' + token);
});
return next.handle(req.clone({ headers: headers }));
}
}
【问题讨论】:
标签: angular5 angular-http-interceptors adal.js angular-observable