Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何修复防伪令牌是为用户准备的&引用;,但当前用户是;xxxx“;错误_C#_Asp.net Mvc - Fatal编程技术网

C# 我如何修复防伪令牌是为用户准备的&引用;,但当前用户是;xxxx“;错误

C# 我如何修复防伪令牌是为用户准备的&引用;,但当前用户是;xxxx“;错误,c#,asp.net-mvc,C#,Asp.net Mvc,提供的防伪令牌用于用户“”,但当前用户为“xxxx” 我遵循了每一个可能的解决方案来消除这个错误,但没有成功: 以下是场景: 我在浏览器选项卡A选项卡B中打开了两个单独的登录选项卡: 1.我在选项卡A中登录到我的站点 2.然后尝试登录选项卡B 然后出现上述错误 我的C#web MVC登录视图具有: v class="col-md-4 col-md-offset-4"> <form class="form-signin" role="form" acti

提供的防伪令牌用于用户“”,但当前用户为“xxxx”

我遵循了每一个可能的解决方案来消除这个错误,但没有成功:

以下是场景: 我在浏览器选项卡A选项卡B中打开了两个单独的登录选项卡: 1.我在选项卡A中登录到我的站点 2.然后尝试登录选项卡B

然后出现上述错误

我的C#web MVC登录视图具有:

v class="col-md-4 col-md-offset-4">
                <form class="form-signin" role="form" action=@Url.Action("Login", "Account") method="POST" id="signInForm">
                     @Html.AntiForgeryToken()
                    <div class="form-group">
                        <label for="loginEmail">Email</label>
                        <input  type="text" id="loginEmail" name="loginEmail" class="form-control" placeholder="Email address" >
                    </div>
                    <div class="form-group">
                        <label for="loginPassword">Password</label>
                        <input id="loginPassword" type="password"  name="loginPassword" class="form-control" placeholder="Password" >
                    </div>
                    <button class="btn btn-lg btn-primary btn-block main-btn" type="submit">Sign in</button>
                    <div>
                        <br>
                        <a href="@Url.Action("Index","GettingStarted")">Register</a><br>
                        <a href="@Url.Action("ForgotPassword","Account")">Forgot your password?</a>
                    </div>
                </form>

如何修复此错误?

这是因为两个浏览器选项卡共享同一个cookie存储。使用第一个选项卡进行身份验证将设置一个新的cookie来标识您的用户名。提交第二个选项卡时,它将传递从第一个选项卡中的成功身份验证中检索到的更新cookie,以及在身份验证之前加载的将您标识为匿名用户的隐藏表单字段。因为cookie和隐藏表单字段中的用户名不匹配,验证失败

ValidateAntiForgeryTokenAttribute使用的AntiForgeryWorker将经过身份验证的用户名编码到cookie和隐藏表单字段中,并确保在验证时两者匹配。因此,每当您进行身份验证或更改用户时,如果使用ValidateAntiForgeryTokenAttribute发布到操作,则此验证将失败


不幸的是,这意味着您的选项仅限于不使用ValidateAntiForgeryTokenAttribute保护登录操作,忽略您描述的场景并让验证失败,或者在MVC中重新实现Antifforgery实现,使其在验证过程中不包含用户名。

它不是-至少不在我的窗口中(也刷新了),在真实场景中,这什么时候会成为问题(意味着一个人如何尝试从两个选项卡登录两次到同一个站点)?登录到选项卡A后,即登录到选项卡B,只需刷新页面即可。。。列出了你的一些选择。这是我在SO上找到的关于这个主题的第一个像样的答案。干得好!
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{

    if (ModelState.IsValid)
    {