我的页面上有一个表单,其定义如下:
@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'不存在。"。帖子确实有效。
对这里有什么不妥的想法?
答案 0 :(得分:0)
您可以尝试通过正确重定向(例如,在注册后部分而不是return View("RegistrationForm", model);
)再次加载新令牌和整个页面,使用return RedirectToAction("Index");
(假设index-action是默认值)。
修改强>
首先,为什么登录页面中填充了antiforgerytoken,没有用户可以保护?如果没有正当理由,你首先不应该为这个问题烦恼。
除此之外,您还应该检查如何从auth提供程序实现重定向。您可以使用Chrome的网络工具查看此示例,看看它是307重定向作为帖子还是302 Get或其他(?)
如果您在验证后在浏览器上刷新页面(Ctrl + F5),那么一切都工作得很好吗?