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在设置标头的值时不会调用fromJson()
,因此标题将如下所示:
X-XSRF-TOKEN my_token
?
这样可以避免我们删除服务器端的额外双引号。
我错过了一些明显的东西吗?
注意:我不是在寻找解决方法。我试图了解这种行为是否是预期的行为,如果是,那么理由是什么?
答案 0 :(得分: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"