我收到此错误:
The provided anti-forgery token was meant for a different claims-based user than the current user.
Run Code Online (Sandbox Code Playgroud)
我不确定如何更正此问题。
我有一个MVC5网站,在这个网站上有一个登录页面。
这就是它发生的场景。
注意:
我正在使用customErrors,这是我看到错误消息的地方。
当我注销用户时,我正在运行此方法:
[HttpGet]
public void SignOut()
{
IAuthenticationManager authenticationManager = HttpContext.GetOwinContext().Authentication;
authenticationManager.SignOut(MyAuthentication.ApplicationCookie);
}
Run Code Online (Sandbox Code Playgroud)
我可能会在SignOut上丢失某些内容吗?
更新:
仅由于上面列出的第2步而发生。
如果我登录,然后注销(调用相同的代码),然后重新登录,那么我没有这个问题。
我认为您忽略了发布一些相关的代码。Signout您执行的操作将返回void。如果您要直接在浏览器中访问此操作,则该用户在退出后将无法获得前进的方式得到空白页。结果,我只能假设您要么通过AJAX调用它,要么作为另一个动作的方法调用。
MVC中防伪的工作方式是在用户计算机上设置一个cookie,其中包含唯一的生成令牌。如果用户已登录,则使用其用户名来编写该令牌。为了使新的cookie,而无需用户名进行设置,用户必须注销和新的要求,必须进行设置新的cookie。如果您仅注销用户而不进行重定向或其他操作,则尚未设置新的无用户cookie。然后,当用户发帖时,旧的基于用户的cookie会被发回,而MVC正在寻找新的无用户的cookie,然后繁荣起来:这是您的例外。
就像我说的那样,您尚未发布足够的代码来确定发生这种情况的原因或确切位置,只是简单地确保在注销用户后有一个新的请求,以便可以设置新的cookie。