繁体   English   中英

HTTP拦截器中的角度HTTP

[英]Angular HTTP within a HTTP Interceptor

我需要将必要的HMAC标头附加到请求中。 这应该不是很困难,但我开始感到沮丧。 以下代码有什么问题。 我正在进行的实际http调用; 我自己运行了这个调用,它返回了必要的数据。 它在拦截器内部不起作用。

我只是希望在为此拦截器添加白名单或黑名单以及其他可自定义数据之前使当前实现正常工作。 这不是关于hmac的问题,而是有了承诺。

此拦截器中的错误是整个承诺行从$ http(...)开始。 当我删除此块并按原样使用它(减去承诺执行)它工作正常。 一旦我取消注释该线就会卡在一个循环中并崩溃铬。 我读过的每个地方都说它是如何完成的,但这显然不起作用。

function requestInterceptor(config){
  var $http = $injector.get('$http');
  var deferred = $q.defer();

  $http.get(hmacApiEndpoint, {cache: true}).then(function(data){
    console.log('HMAC - Success', data)
    deferred.resolve(config)
  }, function(config){
    console.log('HMAC - Error', config)
    deferred.resolve(config)
  })

  return deferred.promise;
}

return {
  request: requestInterceptor
};

这是否与angulars $ http promise与'$ q'不同的实现有关?

看起来您实际上并未使用新获得的HMAC修改config

此外,您需要保护您的requestInterceptor拦截调用以获取HMAC,从而导致无限循环。

最后,你不需要deferred - 只返回$http (或$http.then() )产生的承诺:

function requestInterceptor(config){
  var $http = $injector.get('$http');

  // just return, if this is a call to get HMAC
  if (config.url === hmacApiEndpoint) return config;

  return $http.get(hmacApiEndpoint, {cache: true})
    .then(function(response){
      console.log('HMAC - Success', response.data)

      // not sure where the HMAC needs to go
      config.headers.Authorization = response.data;
      return config;
    })
    .catch(function(){
       return $q.reject("failed to obtain HMAC");
    });
}

return {
  request: requestInterceptor
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM