2013-06-26 13 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); 

}]); 

मैं की तरह 'अज्ञात प्रदाता $ cookieStore' एक AngularJS त्रुटि मिलती है।

'myApp' निर्भर है और 'ngCookies' और कोणीय-कुकीज़.मिन.जेएस लॉज किया गया है, तो उस कोड के साथ क्या गलत है?

क्या यह तथ्य है कि मैं इसे .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

पहले से ही परीक्षण किया गया है और त्रुटि अपमानजनक है, लेकिन फिर मुझे 'अपरिभाषित करने के लिए संभव नहीं है', i.e $ cookieStore – kij

+0

ओह यह सही है। कॉन्फ़िगरेशन भाग में आप केवल प्रदाताओं का उपयोग कर सकते हैं, जबकि .run भाग में आप केवल उदाहरणों का उपयोग कर सकते हैं। मुझे लगता है कि cookieStore प्रदाता नहीं है –

+0

दंडित। $ Http के साथ अनुरोध करते समय गतिशील रूप से शीर्षलेख सेट करने का कोई और तरीका है? – kij

0

का उपयोग करना मॉड्यूल.रुन() हमेशा हेडर सेट करने के लिए एक क्लीनर तरीका प्रतीत होता है जो हमेशा आवश्यक होता है। मेरा उत्तर यहां देखें: AngularJS pass requestVerificationToken to a service

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; 
    } 
    } 
}]) 
} 
संबंधित मुद्दे