2015-09-05 145 views
0

我为我的REST应用程序设置标题有一些麻烦。 我需要授权令牌设置为授权头,实际上我使用此代码:中的forEachAngularJS中的拦截器

app.factory('sessionInjector', ['$log','$rootScope', function($log, $rootScope) { 
    var sessionInjector = { 
     request: function(config) { 

       $log.debug($rootScope.accesstoken); 

       angular.forEach($rootScope.accesstoken, function(value, key) { 
        if(key=='access_token'){ 
         $log.debug(value); 
         config.headers['Authorization'] = "Bearer " + value; 
        } 
       }); 

      return config; 
     } 
    }; 
    return sessionInjector; 
}]); 


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

值具有正确的标记值。

可惜还是没有得到资源...

记录语句执行,我看不出请求头。 Image with headers 第一个请求头用于获取令牌,并且工作正常,但对第二个请求等资源的请求不会发送适当的头。 对于卷曲这个工程:

curl -H "Authorization: Bearer 5314f45f-0ad0-4f3c-92c0-429c8075eea4" http://localhost:8080/categories/ 
+0

这看起来对我来说都是正确的。你在控制台中看到任何错误吗? –

+0

只有这种类型的错误:1.选项http:// localhost:8080/categories angular.js:9827 2.XMLHttpRequest无法加载http:// localhost:8080/categories。无效的HTTP状态代码401(索引):1 –

回答

0

而是与每个传出要求设置它的,也许你应该设置这样的标题:天疼痛

$httpProvider.defaults.headers.common['Authorization'] = "Bearer " + value; 
+0

这太不起作用了;/ –

+0

@KrzysztofKrólikowski我希望你尝试在应用程序模块的配置方法中设置它,而不是在拦截器内部,如下所示:'.config(function($ httpProvider){http://www.Provider.defaults.headers.common'Authorization' ] =“承载者”+值; })' –

0

后一个我发现,实现的拦截器工作当我在IE上执行网站时......但是为什么?为什么我无法在Chrome或Firefox下设置标题?我用Himanshu的方法和AJAX语法尝试设置了带有interceptorsm的头文件,为什么它们都不适用于这些浏览器?