提供的防伪令牌适用于与当前用户不同的基于声明的用户

时间:2016-12-21 08:29:06

标签: asp.net-mvc antiforgerytoken

我尝试在操作之前使用[ValidateAntiForgeryToken]属性。如果我在没有登录的情况下执行此操作,则目前正在使用。但是,如果我在调用此操作之前通过ajax登录,则会收到此错误。

  

提供的防伪令牌适用于不同的声明   用户比当前用户。

我在网站布局中存在的登录表单@Html.AntiForgeryToken()中使用。从该帖子到更新操作已@Html.AntiForgeryToken()。我尝试使用Salt但收到错误 .I使用行动[ValidateAntiForgeryToken]属性。

  [ValidateAntiForgeryToken]
    [ValidateInput(true)]
    public ActionResult PrePaymentBank(CharterParam charterParam, string MobileForSMS){}

有什么问题? enter image description here

2 个答案:

答案 0 :(得分:1)

我今天得到了这个,修复是用[AutoValidateAntiforgeryToken]替换[ValidateAntiForgeryToken]

.NET Core 2改变了无法抑制用户的过程。对不起,如果你没有使用.NET Core 2。

https://github.com/aspnet/Antiforgery/blob/dev/src/Microsoft.AspNetCore.Antiforgery/Internal/DefaultAntiforgeryTokenGenerator.cs

答案 1 :(得分:0)

页面最初呈现时(即@Html.AntiForgeryToken()方法运行时),将为您的匿名用户生成防伪令牌。

通过AJAX请求登录时,您将从匿名用户更改为登录用户。

以后提交带有为匿名用户生成的防伪令牌的表单时,验证失败,因为(作为例外情况)

  

“令牌是针对其他基于声明的用户 [即匿名   用户] ,而不是当前用户。您登录的自我]

要解决此问题,您需要确保在成功登录AJAX请求后重新生成防伪令牌。