情景:
某頁面未登錄下可以訪問,但具體操作時發現未登錄就彈出登錄窗,待完成登錄后繼續操作。
當登錄成功,前端繼續操作(post后端接口)時發現以下錯誤:
提供的防偽標記適用於用戶“”,但當前用戶為“XX”。
(登錄以及具體頁面操作都是ajax post)
看到這個錯誤后先是這么處理:
//登錄代碼。。。
string
oldCtoken = HttpContext.Request.Cookies[
"__RequestVerificationToken"
].Value;
string
ctoken;
string
ftoken;
AntiForgery
.GetTokens(oldCtoken,
out
ctoken,
out
ftoken);
//生成新token
HttpContext.Request.Cookies.Set(
new
HttpCookie
(
"__RequestVerificationToken"
, ctoken));
但是發現雖然使用了新的cookie token 、 form token ,但是還是提示用戶不對。
接着研究源碼。。。通過研究源碼發現:生成token的時候 會取當前用戶identity。 (之前有遇到登錄后,identity 不會刷新,所以解決方案很明顯了)
string
[] roles =
new
string
[] {
"Role1"
,
"Role2"
}; //具體情況設置
HttpContext.User =
//這樣也是可以的
//ftoken = AntiForgery.GetHtml().ToString();
//Regex r = new Regex(@"value=""([^""]+)");
//var m = r.Match(ftoken);
//return Content(m.Groups[1].Value);