登录时MVC 4防伪造错误

时间:2013-08-22 09:22:44

标签: asp.net-mvc asp.net-mvc-4 antiforgerytoken

我有一个 MVC 4 网络应用程序,后台运行 ELMAH ,以帮助我跟踪网站上发生的任何错误。我注意到发生了一些错误,说明了以下内容

  

System.Web.Mvc.HttpAntiForgeryException:所需的防伪   表单字段“__RequestVerificationToken”不存在。

当用户尝试登录我的网站时,大多数错误似乎都会发生。说实话,我刚开始使用开箱即用的 MVC 4 Visual Studio登录视图,即我的视图有以下内容

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

//textboxes for username and password 
//login button

}

然后我的帐户管理员使用登录操作

 [HttpPost]
 [AllowAnonymous]
 [ValidateAntiForgeryToken]
 public ActionResult Login(LoginModel model, string returnUrl)
 {
      if (ModelState.IsValid && _accountService.Logon(model.Email, model.Password,false))
      {

      }

 }

你认为这段代码看起来有什么问题吗?我不知道如何摆脱这些错误。

任何反馈或建议都将受到赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

我有一个用户报告了同样的问题,我们发现他们点击登录按钮两次就会发生这种情况。

我认为问题在于登录会更改令牌,但是当重新提交表单时,它会使用旧令牌。一种解决方案是禁用登录按钮,以便用户只能提交一次表单。

但这并不完美,因为登录可能会超时或者某些东西而且他们无法在不重新加载页面的情况下再次尝试,所以我目前正在寻找更好的解决方案。 / p>