在我的登录表单中,我有一个像这样的方法:
[HttpPost]
[ValidateAntiForgeryToken]
[AllowAnonymous]
public async Task<ActionResult> Login(LoginModel model, string returnUrl)
{
var result = await _applicationSignInManager.PasswordSignInAsyncResponse(someParamshereToPass);
// ...
}
问题是,花时间进行登录检查时,用户可以双击“提交”按钮并再次调用此方法,尽管用户现在已通过身份验证,但它将尝试为他创建另一个令牌,这将导致以下崩溃:
所提供的防伪令牌是针对与当前用户不同的基于声明的用户。
我做了查找答案以防止双击表单,无法使它们工作,并且大多数解决方案是禁用按钮!那么,如果他们输入密码错误,如何启用它!有些是Ajax
我不知道如何使用。
因此,理想情况下,我正在寻找针对此的服务器端解决方案,如果没有,那么就是JS
解决方案。如果没有,那么确定Ajax
解决方案!
单击该按钮后,可以禁用它。
唯一的问题是,如果您使用ASP.Net MVC客户端验证,则只想在客户端验证成功后才禁用它。否则,如果用户在未输入任何内容的情况下单击按钮,则该按钮将永远被禁用。
@using (Html.BeginForm("Login", "Account",
new { ReturnUrl = ViewBag.ReturnUrl },
FormMethod.Post, new { role = "form", autocomplete = "off" }))
{
@Html.AntiForgeryToken()
...
<div class="form-group">
<button id="btnSubmit" type="submit" value="Sign In"
class="btn btn-primary btn-block">Sign In</button>
</div>
}
<script type="text/javascript">
$(function () {
$("form").data("validator").settings.submitHandler = function (form) {
$("#btnSubmit").html("<i class=\"fa fa-spinner fa-pulse\"></i> Signing In...").prop('disabled', true);
form.submit();
};
});
</script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句