asp.net mvc 4 AntiForgery 提供的防偽標記適用於用戶“”,但當前用戶為“XX” 問題處理記錄


情景:
   某頁面未登錄下可以訪問,但具體操作時發現未登錄就彈出登錄窗,待完成登錄后繼續操作。
  當登錄成功,前端繼續操作(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));
                 return  Content(ftoken); //返回,前端收到后設置 hidden token
但是發現雖然使用了新的cookie token 、 form token ,但是還是提示用戶不對。
接着研究源碼。。。通過研究源碼發現:生成token的時候 會取當前用戶identity。 (之前有遇到登錄后,identity 不會刷新,所以解決方案很明顯了)
 
  string [] roles =  new  string  [] {  "Role1" ,  "Role2"  }; //具體情況設置
                HttpContext.User =
                    new  GenericPrincipal  ( new  GenericIdentity (  "XX" ), roles);  //用戶名具體設置
 
 
                //這樣也是可以的
                //ftoken = AntiForgery.GetHtml().ToString();
                //Regex r = new Regex(@"value=""([^""]+)");
                //var m = r.Match(ftoken);
                //return Content(m.Groups[1].Value);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM