如何在角度

时间:2015-09-16 10:52:03

标签: angularjs interceptor angular-resource

我想拦截资源调用中的请求。我的拦截器的目的是拦截发送到服务器的所有请求的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');

我也将拦截器定义为$ resource参数:

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

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

我无法弄清楚为什么永远不会执行authInterceptor。是否有可能以角度拦截$资源或我必须使用$ http?

1 个答案:

答案 0 :(得分: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);
         }
     }
 })

然后将此transformRequest设置为transformRequest

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