在观察响应的同时仅从Http拦截器返回响应主体

时间:2018-08-23 09:45:20

标签: angular typescript

在我的有角度的应用程序中,我正在使用Http拦截器在每个请求中附加JWT。我还需要从响应标头中读取一些自定义数据,这些数据是在res.headers.get(“ authority”)代码的帮助下读取的。在将请求发送到服务器时,我已打开{observe:'response'},以便我也可以获取标头信息。

我只需要从拦截器返回响应主体到服务/组件,下面是拦截器示例代码片段:

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
//debugger
return next.handle(req).map((event: HttpEvent<any>) => {
  if (event instanceof HttpResponse) {
    //return event.body;
    if (!localStorage.getItem("LoggedInUserRole"))
      this.authenticationService.setLoggedInUserRole(event.headers.get("authority"));
    return event;
    //debugger
  }
});

}

1 个答案:

答案 0 :(得分:0)

您的方法是错误的。您无需在每个请求中都附加JWT。

如果在成功登录的后端登录路径上,服务器以“ Set-Cookie”标头响应,它将在所有后续请求中自动设置JWT标头,则客户端无需设置Cookie。

>

例如

Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly

要在用户向服务器发出注销请求时将其删除,服务器应以以下方式响应:

Set-Cookie: <cookie-name>=''; HttpOnly

这还具有将其设置为仅http的好处,从而提高了安全性。

请参见https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie