目前我正在研究 Angular6 项目,并且我有 auth-http-interceptor。此文件中的问题是我想每次都从 angular4-adal 服务获取刷新令牌/获取令牌,为此,我必须订阅将提供令牌的获取令牌,然后想在 authReq 对象中分配该令牌.
但是我的拦截方法的返回类型是 Observable。
那我怎么能等待订阅获取令牌然后返回next.handle(authReq)。我试图编写下面的代码,但它抛出一个错误=>声明类型既不是“void”也不是“any”的函数必须返回一个值。
auth-http-interceptor.ts
@Injectable()
export class AuthHttpInterceptor implements HttpInterceptor {
constructor(private adalService: AdalService, private loaderService: LoaderService) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.adalService.acquireToken('###myTenantId').subscribe((token) => {
this.loaderService.display(true);
const authReq = req.clone({
url: environment.apiUrl + req.url,
headers: req.headers
.set('Content-Type', 'application/json')
.set('Authorization', 'Bearer ' + token)
});
return next.handle(authReq).finally(() => this.loaderService.display(false));
});
}
}
任何帮助表示赞赏。