如何防止从表单多次发送登录请求

博恩

在我的登录表单中,我有一个像这样的方法:

     [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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章