I\'ve recently put Live a web application which was built using MVC 4 and Entity Framework 5. The MVC application uses
I had the same problem when
I found this was happening only in IE and I fixed it by doing a couple of things
On the login page I added a check to see if the user is already authenticated, and if so logged out the user, and then redirected to the Login page again.
[AllowAnonymous]
[OutputCache(NoStore=true, Location=System.Web.UI.OutputCacheLocation.None)]
public ActionResult Login)
{
if (HttpContext.Request.IsAuthenticated)
{
WebSecurity.Logout();
Session.Abandon();
return RedirectToAction("Login");
}
return View();
}
The validation code that runs against an AntiForgeryToken also checks your logged in user credentials haven’t changed – these are also encrypted in the cookie. This means that if you logged in or out in a popup or another browser tab, your form submission will fail with the following exception:
System.Web.Mvc.HttpAntiForgeryException (0x80004005):
The provided anti-forgery token was meant for user "", but the current user is "SomeOne".
You can turn this off by putting AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;
in Application_Start
method inside Global.asax
file.
When a AntiForgeryToken doesn’t validate your website will throw an Exception of type System.Web.Mvc.HttpAntiForgeryException
. You can make this a little easier by at least giving the user a more informative page targeted at these exceptions by catching the HttpAntiForgeryException.
private void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpAntiForgeryException)
{
Response.Clear();
Server.ClearError(); //make sure you log the exception first
Response.Redirect("/error/antiforgery", true);
}
}
More info:
Anti forgery token is meant for user “” but the current user is “username”
Html.AntiForgeryToken – Balancing Security with Usability
I believe this is occurring because the users are double-clicking the submit button on the form. At least that's EXACTLY the case on my site.
Troubleshooting anti-forgery token problems