2013-05-17 3 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; 
} 
그러나, 하나 (예를 들면 레일 통합) $cookieStore를 사용 XSRF-TOKEN 쿠키를 설정하면 :

$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 

:이 헤더는 다음과 같이 표시됩니다 있도록 헤더의 값을 설정할 때

X-XSRF-TOKEN "my_token" 

왜 각도 fromJson()를 호출하지 않습니다?

이렇게하면 서버 측에서 여분의 큰 따옴표를 제거하지 않아도됩니다.

내가 여기에 뭔가 분명한 것을 놓치고 있습니까?

참고 : 나는 해결 방법을 찾는 게 아니에요. 이 행동이 의도 된 행동인지 아닌지 이해하려고 노력하고 있습니다. 그렇다면 근거는 무엇입니까?

+0

는 의도 된 행동인지 잘 모르겠지만, 그것은있을 수 있습니다 XSRF 토큰이 쿠키로 수신 될 때 인식되지 않도록하는 매우 바람직한 부작용입니다. 결국 브라우저는 모든 요청에 ​​대해 쿠키를 보내므로 적절하게 읽을 수없는 쿠키에 토큰이 잘못 배치되면 우발적 인 보호 기능이 손상되지 않습니다. – atk

답변

8

Here is the official answer I got:

여기 진짜 문제는 잘못된 목적을 위해 $의 CookieStore 을 사용하려고한다는 것입니다. $ cookieStore는 $ cookie 상단의 추상화이며 객체와 함께 작동하며 JSON에 직렬화합니다. XSRF 토큰을 할당하려는 경우 $ cookie를 사용하여 쓰기 만하면됩니다. 은 문자열과 직접 작업합니다. 즉

, 하나는 수행해야합니다

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

보다는를 :

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