2013-01-01 33 views
27

मैं रेल के साथ कोणीयजेएस का उपयोग कर रहा हूं। मेरे पास निम्न अनुरोध है जो उपयोगकर्ताओं को थोक में अद्यतन करता है।कोणीय जेएस POST अनुरोध में सीएसआरएफ टोकन सत्यापित करें

$http{ 
    method: 'POST', 
    url: $scope.update_url, 
    params: {selected_ids: userIds} 
} 

यह एक 'प्राप्त' अनुरोध नहीं किया जा सकता कारण URL (http://support.microsoft.com/kb/208427) की लंबाई में प्रतिबंध के

लेकिन 'POST' अनुरोध के लिए, हमें हेडर में सीएसआरएफ प्रामाणिकता टोकन रखना होगा।

हम पोस्ट अनुरोध हेडर पर सीएसआरएफ टोकन कैसे सेट कर सकते हैं?

उत्तर

65

आप $http सेवा में समझाए गए अनुसार http शीर्षलेख सेट कर सकते हैं।

आप इसे सेट कर सकते हैं विश्व स्तर पर अप:

$httpProvider.defaults.headers.post['My-Header']='value' (or) 
$http.defaults.headers.post['My-Header']='value'; 

अथवा एक ही अनुरोध के लिए:

क्रॉस साइट रिक्वेस्ट फोर्जरी (:

$http({ 
    headers: { 
     'My-Header': 'value' 
    } 
}); 

यहाँ Angular से एक महत्वपूर्ण उद्धरण है एक्सएसआरएफ) सुरक्षा एक्सएसआरएफ द्वारा एक तकनीक है जो एक अनधिकृत साइट आपके उपयोगकर्ता का निजी लाभ प्राप्त कर सकती है ते डेटा कोणीय एक्सएसआरएफ का मुकाबला करने के लिए निम्नलिखित तंत्र प्रदान करता है। XHR अनुरोधों का प्रदर्शन करते समय, $ http सेवा XSRF-TOKEN नामक कुकी से टोकन पढ़ती है और इसे HTTP शीर्षलेख एक्स-एक्सएसआरएफ-टोकन के रूप में सेट करती है। चूंकि केवल आपके डोमेन पर चलने वाली जावास्क्रिप्ट कुकी पढ़ सकती है, तो आपका सर्वर आश्वस्त किया जा सकता है कि XHR आपके डोमेन पर चल रहे जावास्क्रिप्ट से आया था।

इसका लाभ उठाने के लिए, आपके सर्वर को में एक टोकन सेट करने की आवश्यकता है जावास्क्रिप्ट पठनीय सत्र कुकी जिसे पहले HTTP GET अनुरोध पर XSRF-TOKEN कहा जाता है। बाद के गैर-जीईटी अनुरोधों पर सर्वर सत्यापित कर सकता है कि कुकी एक्स-एक्सएसआरएफ-टोकन HTTP शीर्षलेख से मेल खाता है, और इसलिए सुनिश्चित करें कि आपके डोमेन पर केवल जावास्क्रिप्ट चल रहा है, टोकन पढ़ सकता है। टोकन प्रत्येक उपयोगकर्ता के लिए अद्वितीय होना चाहिए और सर्वर (जावास्क्रिप्ट को अपने स्वयं के टोकन बनाने से रोकने के लिए) द्वारा सत्यापित किया जाना चाहिए। हम अनुशंसा करते हैं कि टोकन आपकी साइट के प्रमाणीकरण कुकी को अतिरिक्त सुरक्षा के लिए नमक के साथ डाइजेस्ट करें।

+0

धन्यवाद धन्यवाद! क्या सीएसआरएफ-टोकन के साथ एक पोस्ट अनुरोध करने का यह सही तरीका है? या मुझे एक छिपी हुई फॉर्म बनाना चाहिए और एनजी-क्लिक() पर छात्र आईडी के साथ फॉर्म जमा करना चाहिए? लेकिन उस मामले में, मैं प्रतिक्रिया डेटा कैसे प्राप्त कर सकता हूं? एक बार फिर धन्यवाद! –

+0

मैंने कोणीय से उद्धरण जोड़ा है। – asgoth

+2

मुझे अस्पष्ट है कि यह समाधान कोणीय के दस्तावेज़ों के अनुरूप क्यों है। दस्तावेज़ बताते हैं कि आपको कुकी सेट करने की आवश्यकता है लेकिन आप मैन्युअल रूप से हेडर सेट करना प्रतीत होता है। – RevNoah

0

मैं हाल ही में एक ही मुद्दा है और मणि angular_rails_js इसे हल जोड़ने का सामना करना पड़ा है। मेरी समझ के लिए यह प्रत्येक रेल नियंत्रक के लिए एक सीसीआरएफ-टोकन के साथ एक कुकी बनाता है जो कोणीय $ http द्वारा पकड़ (डिफ़ॉल्ट $ http व्यवहार) होगा।