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"