防伪令牌问题

时间:2018-01-30 14:48:01

标签: asp.net post antiforgerytoken

我的页面上有一个表单,其定义如下:

 @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "signupform" }))
            {

                    @Html.AntiForgeryToken()
    ..... FORM MARKUP
}

我的页面是RegistrationForm。

控制器定义:

public ActionResult RegistrationForm()
        {
           //custom logic            
            return View("RegistrationForm", model);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult RegistrationForm(RegisterFormRenderingModel model)
        {
             ... cutom logic
              return View("RegistrationForm", model);
        }

这很好用。我可以提交表格,一切正常。但是在该页面上有一个模式,用户可以登录并重定向回同一页面。身份验证是通过第三方系统完成的,然后当用户通过身份验证后,他们会重定向回到之前的同一页面。 当发生这种情况时,我们会收到错误"所需的防伪表单字段' __ RequestVerificationToken'不存在。"。帖子确实有效。

对这里有什么不妥的想法?

1 个答案:

答案 0 :(得分:0)

您可以尝试通过正确重定向(例如,在注册后部分而不是return View("RegistrationForm", model);)再次加载新令牌和整个页面,使用return RedirectToAction("Index");(假设index-action是默认值)。

修改

首先,为什么登录页面中填充了antiforgerytoken,没有用户可以保护?如果没有正当理由,你首先不应该为这个问题烦恼。

除此之外,您还应该检查如何从auth提供程序实现重定向。您可以使用Chrome的网络工具查看此示例,看看它是307重定向作为帖子还是302 Get或其他(?)

如果您在验证后在浏览器上刷新页面(Ctrl + F5),那么一切都工作得很好吗?