Angular 6拦截器无法处理响应

问题描述 投票:0回答:3

我启用了来自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从未被调用,并且还有其他步骤。

请帮我搞清楚

angular laravel typescript observable interceptor
3个回答
0
投票

我在NGIR项目中添加了Notification Interceptor,它工作正常,你可以在这个项目文件中看到响应拦截器的一个例子

Link to NGIR Notification Interceptor

希望能帮助到你。


0
投票

您是否尝试在intercept()的开头放置一个console.log来查看它是否被触发?

您是否已将拦截器类添加到模块提供程序中,如下所示?

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

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

0
投票

问题很简单。由于我已经对我的服务器进行了授权检查,并且角色检查我一直在收到错误,但是由于拦截器是Osbervable,它有下一个回调next, error, complete,我只接下来处理,同时得到错误。因此,当我遇到错误时,我没有得到任何标题。

© www.soinside.com 2019 - 2024. All rights reserved.