多个登录选项卡会发生HttpAntiForgeryException

时间:2015-12-26 03:52:30

标签: asp.net-mvc authentication

我试图处理 HttpAntiForgeryException

问题如下:

  1. 用户打开几个带有登录页面的标签(即错误地)
  2. 在其中一个标签上登录
  3. 打开另一个标签,忘记他已经登录过上一个标签页并按下"登录"按钮
  4. 然后我们得到以下异常:

    提供的防伪令牌适用于用户"",但当前用户是"用户名"。

    我似乎无法调试控制器的登录操作。我设置了断点,只有当你第一次在其中一个标签上发布表格时,它们才会被解雇,但是如果你正在推动"登录"任何其他选项卡上的按钮 - 断点都不会被触发。我不知道如何处理这个问题。

    有没有办法在登录页面上使用javascript来处理这个问题? 是否还有其他方法可以在控制器中处理这个问题?

1 个答案:

答案 0 :(得分:0)

解决。

public class HandleAntiForgeryError : ActionFilterAttribute, IExceptionFilter
{
    #region IExceptionFilter Members

    public void OnException(ExceptionContext filterContext)
    {
        var exception = filterContext.Exception as HttpAntiForgeryException;
        if (exception != null)
        {
            var routeValues = new RouteValueDictionary();
            routeValues["controller"] = "Account";
            routeValues["action"] = "Login";
            filterContext.Result = new RedirectToRouteResult(routeValues);
            filterContext.ExceptionHandled = true;
        }
    }

    #endregion
}

然后在AccountController中的Login方法之前输入 [HandleAntiForgeryError]