我遇到有关MVC Anti伪造令牌的问题。 当我进行身份验证时,我有这样的伪代码:
var user = userRepository.GetByEmail(email);
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = user;
通过这样做,我能够在我的代码中获得当前用户:
var user = HttpContext.Current.User as EntityUser;
这一点很好,直到我将[ValidateAntiForgeryToken]属性添加到一个动作。 当我添加属性时我得到了
未提供所需的防伪标记或无效。
如果我注释掉这一行:
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = user;
防伪验证工作正常,但是我没有方便的方法从HttpContext获取我的“EntityUser”。 有关如何解决这个问题的任何想法? 最好的祝福 的Mikael
答案 0 :(得分:3)
我不认为那些是相关的。将[ValidateAntiForgeryToken]
属性添加到控制器操作时,还需要在表单中添加隐藏字段:
<%= Html.AntiForgeryToken() %>
如果您通过AJAX提交,则始终需要在请求中发送此令牌。
答案 1 :(得分:0)
实际上AntiForgeryToken在验证中使用HttpContextBase.User。请参阅AntiForgeryWorker.Validate