Angular sets the X-XSRF-TOKEN header to the value of the XSRF-TOKEN cookie:

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 cookie(例如,用于Rails集成):
$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"

为什么Angular在设置 header 的值时不调用 fromJson() 以便 header 看起来像这样:
X-XSRF-TOKEN    my_token



这样可以避免我们在服务器端删除多余的双引号。

我是否在这里遗漏了一些明显的东西?

注意:我不是在寻找解决方法。我正在尝试了解此行为是否是预期的行为,如果是,则原理是什么?

最佳答案

Here is the official answer I got:



换句话说,应该做的是:
$cookies["XSRF-TOKEN"] = "my_token"; // Stored as: my_token
而不是:
$cookieStore.put("XSRF-TOKEN", "my_token"); // Stored as: "my_token"

10-08 15:57