2015-05-27 16 views
5

मुझे AngularJS में $ http कॉल के साथ समस्याएं आ रही हैं। मैं निम्नलिखित सेवाओं

crApp.service('authService', function ($http) { 

    var urlBase = 'http://192.168.xx.xx:8081'; 

    // POST api/login/ 
    this.login = function (credentials) { 
    return $http.post(urlBase + "/api/login", credentials); 
    }; 

    // POST api/logout/ 
    this.logout = function() { 
    return $http.post(urlBase + "/api/logout/", ""); 
    }; 

}); //end service 

crApp.service('dataService', function ($http) { 

    var urlBase = 'http://192.168.xx.xx:8081'; 

    // POST api/query/ 
    this.pull = function (query) { 
    return $http.post(urlBase + "/api/query", query); 
    }; 

नियंत्रक मैं प्रवेश विधि फोन से बना लिया है:

$scope.login = function(){ 
    authService.login(credentials) 
     .success(function(data) { 
      console.log("RESULT LOGIN: " + data); 
     }) 
     .error(function(data, status, headers, config) { 
      console.log(data); 
      console.log(status); 
      console.log(headers); 
      console.log(config); 
     }); 
}; 

अब तक तो अच्छा है और मैं एक प्रतिक्रिया है, जहां एक कुकी सेट है प्राप्त करते हैं: enter image description here

succesfull लॉगिन के बाद मैं निम्नलिखित विधि को कॉल करता हूं:

var locations = { query: "from location select uid, name, description, address, phone", dataFormat: "verbose" }; 
$scope.getLocations = function() { 
    dataService.pull(portals) 
     .success(function (data) { 
      console.log("RESULT QUERY: " + data) 
     }) 
     .error(function(data, status, headers, config) { 
      console.log("Query niet gelukt!"); 
      console.log(data); 
      console.log(status); 
      console.log(headers); 
      console.log(config); 
     }); 
}; 

परिणाम:

enter image description here

तो कुकी हेडर में सेट नहीं है। मैं AngularJS 1.3.15 का उपयोग कर रहा हूं और कॉल एक अलग डोमेन पर दूरस्थ सर्वर पर किए जाते हैं, लेकिन यह वेबस्टॉर्म (जेटब्रेन) में REST क्लाइंट टूल में काम करता है। तो यह कुछ ऐसा होना चाहिए जो मैं कोणीय में लापता हूं !?

उम्मीद है कि कोई मेरी मदद कर सकता है।

उत्तर

11

आपको $http कॉन्फ़िगरेशन में withCredentials = true सेट करने की आवश्यकता है ताकि कुकीज़ को CORS अनुरोधों पर सेट करने की अनुमति मिल सके। This article explains more about cookies and CORS

अपने अनुप्रयोग config में:

$httpProvider.defaults.withCredentials = true; 

उदाहरण के लिए:

angular.module('myApp', []) 
.config(['$httpProvider'){ 
    $httpProvider.defaults.withCredentials = true; 
}]); 

आप $http provider documentation में इस विकल्प के बारे में पढ़ सकते हैं।

+1

आपको क्लाइंट साइड पर 'क्रेडेंशियल्स' की आवश्यकता है, लेकिन आपको सर्वर की तरफ 'एक्सेस-कंट्रोल-अनुमति-प्रमाण-पत्र: सत्य' शीर्षलेख सेट करने की भी आवश्यकता है? यदि नहीं, तो यह काम नहीं करेगा। यदि आप मेरे द्वारा लिंक किए गए लेख के अंत की ओर देखते हैं, तो आप सर्वर की आवश्यकताओं को देखेंगे। – Scott

+0

मेरे सहयोगी जो सर्वर-साइड के कोड का प्रबंधन करते हैं, यह सुनिश्चित है कि सबकुछ सर्वर पर सही है। अन्य विकल्प? – marlonlaan

+0

@MarlonVanDerLaan इस तरह यह काम करता है, अगर यह उस गाइड के अनुसार सेटअप है जो आपने पोस्ट किया है, तो यह काम करेगा। मैं "बहुत यकीन" सत्यापित करूंगा क्योंकि यह एक महत्वपूर्ण हिस्सा है, यह एक शो स्टॉपर है। प्रतिक्रिया के लिए आपके उपरोक्त स्क्रीनशॉट में वह हेडर गुम है। – Scott

संबंधित मुद्दे