在我的角度应用程序中,我使用 Http 拦截器在每个请求中附加 JWT。我还需要从响应标头中读取一些自定义数据,我在res.headers.get("authority"(代码的帮助下读取这些数据。我在将请求发送到服务器时打开了{观察:"响应"},以便我也可以获取标头信息。
我只需要从拦截器将响应正文返回到服务/组件,下面是示例拦截器代码片段:
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
}
});
}
你的方法错了。无需在每个请求中附加 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