0

我对 MVC Anti forgery 令牌有疑问。当我进行身份验证时,我有这样的伪代码:

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”。关于如何解决这个问题的任何想法?最好的问候米凯尔

4

2 回答 2

3

我不认为这些是相关的。当您将[ValidateAntiForgeryToken]属性添加到控制器操作时,您还需要在表单中添加隐藏字段:

<%= Html.AntiForgeryToken() %>

如果您通过 AJAX 提交它,您始终需要随请求发送此令牌。

于 2010-05-15T07:52:45.683 回答
0

实际上 AntiForgeryToken 在验证中使用 HttpContextBase.User 。请参阅 AntiForgeryWorker.Validate

于 2012-08-29T13:41:48.357 回答