angular – HttpInterceptor-> Service-> HttpClie
所以我有我的身份验证服务AuthService,它基本上有两个方法,一个从服务器获取一个新令牌,一个用户名和一个密码,另一个检索当前存储的令牌,并在必要时刷新令牌.
两者显然都依赖于HttpClient.也就是说,AuthService依赖于HttpClient.让我们记住这一点. 另一个“服务”是一个HttpInterceptor,我想拦截除AuthService之外的所有传出请求,以添加Authorization标头(现在它变得很脏).为了构成那个头,我们需要一个令牌,我们从AuthService获得.也就是说,AuthInterceptor(我的拦截器的名称)依赖于AuthService.据我所知,HttpClient依赖于所有HTTP_INTERCEPTORS. 所以场景如下: 关于如何打破这个圈子的任何想法或建议? 到目前为止,我发现了一个类似的issue但是解决方法表明没有解决我的问题,现在我在引导过程中在发送任何请求之前得到无限递归.我已经处理了拦截登录和令牌刷新请求的情况,以避免this,所以据我所知,这不是问题所在. 摘自摘录: @Injectable() export class AuthInterceptor implements HttpInterceptor { private auth: AuthService; constructor(inj: Injector) { this.auth = inj.get(AuthService); } intercept(req: HttpRequest<any>,next: HttpHandler): Observable<HttpEvent<any>> { // Ignore if login or refresh request if (req.url.includes('login')) { return next.handle(req); } console.log('Intercepting request...'); return this.auth.getToken().map(token => { const authHeader = 'Bearer ' + token; const authReq = req.clone({setHeaders: {Authorization: authHeader}}); return authReq; }).concatMap(newReq => next.handle(newReq)); } }
更新08/02/2018 – 角度5.2.3
只是对此的更新:这是在角度5.2.3中修复的 https://github.com/angular/angular/blob/master/CHANGELOG.md#bug-fixes-2 因此,您可以在HttpInterceptors中直接注入依赖于HttpClient的服务 @Injectable() export class AuthInterceptor implements HttpInterceptor { constructor(private auth: AuthService) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |