[英]Nopcommerce The required anti-forgery form field “__RequestVerificationToken” is not present."
[英]The required anti-forgery form field “__RequestVerificationToken” is not present on $.post
目前,我的帖子中没有显示我的AntiForgeryToken的问题,但据我所知,它实际上在那里。
由于我不使用表单从HTML中获取数据,而只是使用输入字段,因此我使用以下命令在页面底部制作了一个空表单:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id =
"__AjaxAntiForgeryForm" }))
{
@Html.AntiForgeryToken()
}
这导致了我可以使用jQuery获得的AntiForgeryToken。
所以在我的JavaScript中,我这样做:
var LoginData = {
EmailAddress: currentMail,
Password: password
}
var form = $('#__AjaxAntiForgeryForm');
var token = $('input[name="__RequestVerificationToken"]', form).val();
data = {
__RequestVerificationToken: token,
LoginData: LoginData
}
$.post(window.location,
{
scController: '*Controller*',
scAction: 'ValidateLogin',
data: data
}).done(function (d, e) {
console.log("done");
console.log(d);
console.log(e);
}).fail(function (d, e) {
console.log("error");
console.log(d);
console.log(e);
});
我创建的数据对象导致:
{LoginData: {EmailAddress: "********", Password: "*******"}, __RequestVerificationToken: "Imagine a token here"}
然后我的控制器动作:
[HttpPost]
[ValidateAntiForgeryToken]
public ResultMessage ValidateLogin(LoginData login)
{
return _userRepository.Login(login);
}
由于某些原因,当我尝试执行此文章时,出现此错误:
“不存在必需的反伪造表单字段“ __RequestVerificationToken”。”
我究竟做错了什么?
编辑1:我看到Cookie头中的__RequestVerificationToken与我随数据发送的__RequestVerificationToken不同。 怎么会这样?
如此处所述https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks与ajax一起使用时,防伪必须在标头中发送令牌,如下所示:
$.ajax("api/values", {
type: "post",
contentType: "application/json",
data: { }, // JSON data goes here
dataType: "json",
headers: {
'RequestVerificationToken': <Token>
}
});
这是我在此问题上的分步方法。 我正在使用angularJS,jquery,ASP.NET MVC 5 https://stackoverflow.com/a/57781976/2508781
使用MVC的AntiForgery.Validate()
确实可以在这里验证防伪令牌的值,并且到目前为止效果非常好。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.