Google Chrome和ValidateAntiForgeryToken会阻止登录屏幕第二次提交

时间:2016-12-12 14:33:20

标签: google-chrome asp.net-core

我有以下cshtml登录页面

@{
    Layout = "~/Views/Shared/_MyLayout.cshtml";
 }
<form asp-area="Admin" asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-signin" role="form">
    @Html.AntiForgeryToken()
    <input asp-for="Username" class="form-control" required="" autofocus="" />
    <span asp-validation-for="Username" class="text-danger"></span>
    <input asp-for="Password" class="form-control input-md" required="" />
    <span asp-validation-for="Password" class="text-danger"></span>

    <button  type="submit">Login</button>
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
</form>

以及以下控制器方法

   [HttpGet]
    [AllowAnonymous]
    public IActionResult Login()
    {
        return View();
    }



    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginViewModel model)
    {

        if (ModelState.IsValid)
            {
                 ModelState.AddModelError(string.Empty, "You may not log in");
                 return View(model);

这适用于Internet Explorer。但是在Chrome中存在问题。

在Chrome中,我点击“登录”然后点击我的发布方法,并将无效的登录信息返回给我的浏览器。但是,当我第二次再次点击返回的页面登录时,它会在我的javascript浏览器控制台中显示一毫秒的错误消息然后消失,然后显示一个空白页面。

如果我注释掉[ValidateAntiForgeryToken],则第二次登录尝试会正确点击Chrome中的“登录发布”方法。

因此,问题仅限于POST上存在的ValidateAntiForgeryToken属性以及Chrome浏览器。 Internet Explorer没有问题,每次都会点击POST。

0 个答案:

没有答案