2013-06-26 44 views
11

在下面的代码示例:

myApp.config(['$httpProvider', function($httpProvider, $cookieStore) { 

    $httpProvider.defaults.withCredentials = true; 

    $httpProvider.defaults.headers.get['Authorization'] = 'Basic '+ $cookieStore.get('myToken'); 

    return JSON.stringify(data); 

}]); 

我得到一个错误angularjs像 '未知的提供$的CookieStore'。

“对myApp”有dependenciy和“ngCookies”和角cookies.min.js是laoded,有啥错码?

那是事实,我在的.config这样做呢?

+1

你为什么不告诉我们你的'myApp'初始化代码。 – Chandermani

回答

14

因为这是唯一可能通过组态时提供商,我终于完成了我的HTTP参数的覆盖不与租借变压器,但通过创建一个服务作为工厂做请求。

这里是服务(未测试,只是为了信息)的一个代码示例:

angular.module('myapp-http-request', []); 
angular.module('myapp-http-request') 
.factory('MyRequests', function($http, $cookieStore){ 

    return { 
     request: function(method, url, data, okCallback, koCallback){ 
      $http({ 
       method: method, 
       url: url, 
       data: data 
      }).success(okCallback).error(koCallback); 
     }, 
     authentifiedRequest: function(method, url, data, okCallback, koCallback){ 
      $http({ 
       method: method, 
       url: url, 
       data: data, 
       headers: {'Authorization': $cookieStore.get('token')} 
      }).success(okCallback).error(koCallback); 
     } 
    } 
}); 

和示例性使用的(未测试,只是供参考):

angular.module('sharewebapp', ['myapp-http-request']) 
.controller('MyController', ['MyRequests', function(MyRequests){ 
    MyRequests.authentifiedRequest('DELETE', '/logout', '', function(){alert('logged-out');}, function(){alert('error');}) 
}]); 
+0

这也有问题,因为工厂的标题将是静态的。尝试登录,然后出去,然后再次登录,你会发现它仍在使用旧的令牌。 – Rob

2

你可能需要添加的CookieStore

myApp.config(['$httpProvider', '$cookieStore', function($httpProvider, $cookieStore) 
+0

已经测试和错误disapear但后来我得到了一个“不可能做得到不确定的”,即$的CookieStore是未定义 – kij

+0

哦,这是事实。在配置部分中,您只能使用提供者,而在.run部分中,您只能使用实例。我猜饼干店不是供应商 –

+0

该死的。请求$ http时是否有另一种动态设置标题的方法? – kij

2

我已经遇到了同样的问题,所以我会后我怎么得到它周围。我基本上使用$注入器模块手动获取我需要的服务实例。注意这也适用于用户定义的服务。

angular.module('app'). 
config(config); 

config.$inject = ['$httpProvider']; 

function config($httpProvider) { 
    //Inject using the $injector 
    $httpProvider.interceptors.push(['$injector', function($injector){ 
    return { 
    request: function(config) { 

     //Get access by injecting an instance of the desired module/service 
     let $cookieStore = $injector.get('$cookieStore'); 

     let token = $cookieStore.get('your-cookie-name'); 
     if (token) { 
     config.headers['x-access-token'] = token; 
     } 
     return config; 
    } 
    } 
}]) 
}