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);

转载于:https://www.cnblogs.com/jiangzhen/p/3870925.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值