首页 > 解决方案 > Angular 4拦截器未设置标头

问题描述

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const jwt = localStorage.getItem('jwt');
if (!jwt) {
  req = req.clone(
    {
      headers: req.headers.set('Authorization', 'Bearer ' + jwt)
    });
}
console.log(req);
return next
  .handle(req)
  .do(evt => {
    if (evt instanceof HttpResponse) {
    }
  })
  .catch(err => {
    return Observable.throw(err);
  });

}

这是我的 intrceptor 类,在 chrome 请求中看起来像这样: chrome screenchot

CURL 看起来像这样(从 chrome devtools 复制):

curl "http://192.168.10.220:8090/api/portal/getMojeRezerwacjeList" -X 
OPTIONS 
-H "Access-Control-Request-Method: GET" 
-H "Origin: http://localhost:4200" 
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" 
-H "Access-Control-Request-Headers: authorization" --compressed

显然没有带有 Bearer 和 jwt 令牌的标题,我一直收到 401 错误

标签: angular

解决方案


尝试 setHeaders 而不是 headers

const newRequest = req.clone({ setHeaders: { 'Authorization': 'Bearer' + token}


推荐阅读