Angular 6拦截器无法处理响应

时间:2018-09-12 07:58:07

标签: angular laravel typescript observable interceptor

我已经从tymon authorizeAndRefresh启用了Laravel API后端中间件,据我所知,它应该刷新令牌并发回。为此,我做了一个拦截器

intercept(req: HttpRequest<any>, next: HttpHandler):
    Observable<HttpEvent<any>> {
    const authToken = localStorage.getItem('fb_token');

    if (authToken) {
      const request = req.clone({
        headers: req.headers.set('Authorization', 'Bearer ' + authToken)
      });

      return next.handle(request).pipe(
        tap(event => {
          console.log(event);
          if (event instanceof HttpResponse) {
            if (event.headers['token']) {
              console.log(event.headers);
              const token = event.headers['Authorization'].split(' ')[1];
              localStorage.setItem('fb_token', token);
              this.store.dispatch({type: Actions.AUTHENTICATED});
            } else {
              this.store.dispatch({type: Actions.DEAUTHENTICATED});
            }
          }
        })
      );
    }

    return next.handle(req);
  }

但是,似乎没有响应句柄,因为从未console.log被调用,也没有进一步的步骤。

请帮我弄清楚

3 个答案:

答案 0 :(得分:0)

我在NGIR项目中添加了通知拦截器,并且工作正常, 您可以在此项目文件中看到响应拦截器的示例

Link to NGIR Notification Interceptor

希望有帮助。

答案 1 :(得分:0)

您是否尝试过将console.log放置在拦截()的开头,以查看它是否完全被触发了?

您是否已按照以下说明将拦截器类添加到模块提供程序?

import { HTTP_INTERCEPTORS } from '@angular/common/http';

providers: [
{
  provide: HTTP_INTERCEPTORS,
  useClass: MyHttpInterceptorClass,
  multi: true
}

答案 2 :(得分:0)

问题很简单。由于我已经在服务器上进行了授权检查,而且还进行了角色检查,因此我一直遇到错误,但是由于拦截器是Osbervable,因此它具有下一个回调next, error, complete,在出错时我仅处理下一个回调。因此,当我遇到错误时,我没有任何标题。