使用AngularJS应用程序中的$ http从发布请求中删除标题字段

时间:2014-11-11 05:28:05

标签: javascript angularjs

在AngularJS应用中,我将表单发布到支付网关。我有一个标题字段叫"授权"将会话令牌传递给后端API。

尝试向支付网关发出请求时,出现以下错误:

  

XMLHttpRequest无法加载   https://transact.nab.com.au/test/directpostv2/authorise。请求   标题字段不允许授权   接入控制允许集管。

使用Postman发出相同的请求时,一切正常,状态代码为200。

我已经创建了一个快速演示的plunkr,它也获得了200状态http://plnkr.co/edit/8Ts6s0VDTTUVVC9dbCJC

$http({
    method: 'POST',
    url: authoriseURL,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
    },
    data: nabPaymentData
}).
success(function (response, status, headers) {
    alert('Success:' + response + ' status:' + status + ' headers:' + headers);
}).
error(function (err, status, headers) {
    alert('Error:' + err + ' status:' + status + ' headers:' + headers);
});

有没有办法去除一个帖子请求的标题字段?

2 个答案:

答案 0 :(得分:1)

正如我上面的评论,您可以使用拦截器仅删除对支付网关的请求的auth标头。解决方案将是这样的。首先我们使用工厂定义拦截器。后来我们在角配置中推动拦截器。

app.factory('myInterceptor', ['$log', function($log) {
    return {
    // optional method
    'request': function(config) {
      $log.debug(config.url);
      // if request to payment gateway, delete the auth header
      if(config.url.indexOf('https://transact.nab.com.au') > -1) {
        $log.debug('before deleting auth header');
        $log.debug(config.headers);
        delete config.headers.Authorization;
        $log.debug('after deleting auth header');
        $log.debug(config.headers);
      }
      $log.debug(config.url);
      $log.debug(config.headers);
      // do something on success
      return config;
    },


  };
}]);

app.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push('myInterceptor');
}]);

答案 1 :(得分:0)

您可以通过将其设置为Authorization来删除该POST请求的undefined字段:

$http({
  method: 'POST',
  url: authoriseURL,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': undefined
  },
  data: nabPaymentData
});