2013-05-17 5 views
5

Angular sets the X-XSRF-TOKEN header to the value of the XSRF-TOKEN cookie:क्यों AngularJS X-XSRF-TOKEN शीर्षलेख JSON स्ट्रिंग के रूप में भेजता है?

var xsrfValue = isSameDomain(config.url, $browser.url()) 
       ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] 
       : undefined; 
if (xsrfValue) { 
    headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; 
} 

लेकिन, अगर एक XSRF-TOKEN कुकी $cookieStore का उपयोग कर (रेल के लिए एकीकरण, उदाहरण के लिए) सेट:

$cookieStore.put("XSRF-TOKEN", "my_token"); 

the cookie is stored as JSON string:

put: function(key, value) { 
    $cookies[key] = angular.toJson(value); 
} 

इसका मतलब यह है कि शीर्ष लेख होगा अतिरिक्त डबल कोट्स हैं:

X-XSRF-TOKEN "my_token" 

क्यों कोणीय fromJson() फोन नहीं करता है जब यह शीर्ष लेख का मूल्य इतना है कि शीर्ष लेख इस तरह दिखेगा सेट:

X-XSRF-TOKEN my_token 

?

जो हमें सर्वर की ओर से अतिरिक्त डबल कोट्स को हटाने से बचाएगा।

क्या मुझे यहां कुछ स्पष्ट याद आ रही है?

नोट: मैं कामकाज की तलाश नहीं कर रहा हूं। मैं यह समझने की कोशिश कर रहा हूं कि यह व्यवहार इरादा व्यवहार है, और यदि हां, तो तर्क क्या है?

+0

मैं अगर यह अभिप्रेत व्यवहार है पता नहीं है, लेकिन यह एक हो सकता है एक कुकी के रूप में प्राप्त होने पर XSRF टोकन को पहचानने से रोकने के बहुत वांछनीय साइड इफेक्ट। आखिरकार, सीएसआरएफ विशेष रूप से काम करता है क्योंकि ब्राउजर सभी कुकीज़ के साथ अपनी कुकीज़ भेजते हैं, इसलिए एक कुकी में खोला जाने वाला टोकन जिसे ठीक से पढ़ा नहीं जा सकता है, सुरक्षा की आकस्मिक कमी को रोकने में मदद करेगा। – atk

उत्तर

8

Here is the official answer I got:

यहाँ असली समस्या यह है कि आप गलत उद्देश्य के लिए $ cookieStore उपयोग करने के लिए कोशिश कर रहे हैं। $ कुकीस्टोर $ कुकी के शीर्ष पर एक अमूर्त है, जो ऑब्जेक्ट्स के साथ काम करता है और उन्हें JSON पर क्रमबद्ध करता है। यदि आप एक्सएसआरएफ टोकन असाइन करना चाहते हैं तो इसे लिखने के लिए केवल $ कुकी का उपयोग करें, जो स्ट्रिंग के साथ सीधे काम करता है।

दूसरे शब्दों में, एक करना चाहिए:

$cookies["XSRF-TOKEN"] = "my_token"; // Stored as: my_token

बजाय

:

$cookieStore.put("XSRF-TOKEN", "my_token"); // Stored as: "my_token"

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