注销问题:提供的防伪令牌适用于与当前用户不同的基于声明的用户



我在AccountController中有以下LogOff函数:

[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
Session.Remove("UserName");
Session.Remove("UserRoleId"); 
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignOut();
Session.Abandon();
Session.Clear();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
return RedirectToAction("Login", "Account");
}

现在假设我打开了两个浏览器选项卡。如果我从第一页注销,它工作正常。现在成功注销后,如果我再次从第二个窗口中单击注销按钮,它会显示错误: ">提供的防伪令牌适用于与当前用户不同的基于声明的用户。">

我知道这个问题已经被许多用户问过,但是这些答案 没有解决我的问题。我也在这里使用了Session.Abandon()

这正是应该发生的事情。第二个用户没有要注销的内容,因为他已经注销了。所以没关系。

您的问题是向用户显示自定义错误。您肯定希望显示一些自定义消息,为用户提供更多信息和更少的技术细节。

为此,您需要一些异常处理程序,并在其中处理HttpAntiForgeryException

它正常工作,您现在需要做的就是尝试捕获检查,然后在这种情况下将用户重定向到登录页面

最新更新