如何从请求中删除授权标头

时间:2016-08-06 01:43:10

标签: angularjs jwt cloudinary

我使用MEAN Stack User Registration and Login Example & Tutorial作为我的应用的基础。它为运行函数中的每个请求添加了一个auth标头:

$http.defaults.headers.common['Authorization'] = 'Bearer ' + $window.jwtToken;

我想将图片上传到Cloudinary但我收到此错误:

  

XMLHttpRequest无法加载https://api.cloudinary.com/v1_1/xxxx/upload。请求标头字段预检响应中的Access-Control-Allow-Headers不允许授权。

如何针对Cloudinary的请求专门删除此标头?

2 个答案:

答案 0 :(得分:9)

您需要一个拦截器来检查请求的url,如果匹配则清除标头。或者,您可以使用$http配置参数。

使用参数:

$http.post('https://api.cloudinary.com/v1_1/' + someId + '/upload', data, { headers: {} });

使用拦截器:

.factory('cloudinaryInterceptor', function() {
 return {
  request: function(config){
   var authHeader = config.headers('authorization');
   //Check for the host
   var regex = /api\.cloudinary\.com/i;
   if(regex.test(config.url))
    //Detach the header
    delete config.headers.authorization;
   return config;
  }
 }
});

请记住在配置阶段推送拦截器

$httpProvider.interceptors.push('cloudinaryInterceptor');

答案 1 :(得分:0)

之前已经问过这个问题。答案可以找到here

  

当您开始使用自定义请求标头时,您将获得CORS预检。这是一个使用HTTP OPTIONS动词的请求,包括几个标题,其中一个是Access-Control-Request-Headers,列出了客户想要包含在请求中的标题。

     

您需要使用适当的CORS回复该CORS预检   标题使这项工作。其中一个确实是   访问控制允许报头。该标题需要包含相同的内容   包含(或更多)Access-Control-Request-Headers标头的值。