2015-09-16 41 views
1

我想攔截資源調用中的請求。我的攔截器的目的是攔截髮送到服務器的所有請求的http請求和授權頭。這是我的攔截器:

module.exports = function (authToken) { 
return { 
    request: function(config){ 
     var token = authToken.getToken(); 
     if(token){ 
      config.headers.Authorization = 'Bearer ' + token; 
     } 

     console.log(config); 
     return config; 
    }, 
    response: function(response){ 
     return response; 
    } 
} 
}; 

由於配置功能的一部分,我推authInterceptor:

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

我也定義攔截器作爲$資源參數:

module.exports = function ($resource, gwService, authInterceptor) { 

return $resource(gwService.getResourceUrl('/environments/:environmentId'), null, 
    { 
     'update': {method: 'PUT'}, 
     'query': {method: 'GET', interceptor: authInterceptor} 
    } 
); 
}; 

我不能弄清楚爲什麼authInterceptor永遠不會執行。是有可能攔截$資源角度或我必須使用$ http?

+0

的,你不需要通過在$資源攔截 – maddygoround

+1

it's還是一樣:)問題是,授權頭從未添加到http請求 – Sanja

回答

0

現在,這是我該怎麼辦,

當我需要有一個通用的頭,這意味着我要在每一個請求使用再配置我的頭這樣

$http.defaults.headers.post.Authorization = "Bearer QWxhZGRpbjpvcGVuIHNlc2FtZQ=="; 

但是,當我想每個請求頭,意味着我應該能夠決定哪些請求將涉及授權頭,哪些不會有頭,然後我做這樣的事情。

.factory('APIAuthroization', function (authToken) { 
    return { 
     transformRequest: function (data, headersGetter) { 
      var headers = headersGetter(); 
      var token = authToken.getToken(); 
      if (token) { 
       headers.Authorization = 'Bearer ' + token; 
      } 
      return JSON.stringify(data); 
     } 
    } 
}) 

,然後將該transformRequesttransformRequest$resource

return $resource(gwService.getResourceUrl('/environments/:environmentId'), null, 
    { 
     'update': {method: 'PUT'}, 
     'query': {method: 'GET', transformRequest: APIAuthroization.transformRequest} 
    } 
); 
}; 
+1

我正在測試你的方法。 transformRequest被調用,但頭部在請求中從不改變。我正在使用角度1.2.28版本 – Sanja