我已经阅读了很多解决方案,但没有一个能为我工作。
这个github问题基本上是我的问题(https://github.com/angular/angular/issues/20511)
我使用的是Angular 5.2.5,Chrome版本65.0.3325.146,Spring boot 1.5.4。
在我的登录表单上,我首先发送GET请求以获取XSRF cookie。然后我发送一个包含登录信息的帖子
Send GET request that returns Set-Cookie header
使用CSRF
配置的Spring启动应用程序 http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
我正在使用Angular webpack代理,因此网址是相对的,并通过withCredentials
选项发送请求。
我也尝试按照Github问题的建议编写我自己的拦截器,但是在尝试获取令牌let token = this.tokenExtractor.getToken() as string;
时我得到了null我已经在Postman中检查过了cookie将httpOnly标志设置为false
答案 0 :(得分:2)
我一直有同样的问题。我刚刚用一点黑客来修复它
// function to get cookie by name
getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
getItemsFromServer(){
let httpOptions={
headers: new HttpHeaders({
'Content-Type': 'application/json',
'X-XSRF-TOKEN': this.getCookie("XSRF-TOKEN")
}),
withCredentials: true
};
this.httpClient.get(url, httpOptions)
.subscribe(response=>{
// more code here
}
);
}