Проблема с токеном подделки
У меня есть форма на моей странице, которая определяется следующим образом:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "signupform" }))
{
@Html.AntiForgeryToken()
..... FORM MARKUP
}
Моя страница - Регистрационная форма.
Определения контроллера:
public ActionResult RegistrationForm()
{
//custom logic
return View("RegistrationForm", model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RegistrationForm(RegisterFormRenderingModel model)
{
... cutom logic
return View("RegistrationForm", model);
}
Это отлично работает. Я могу отправить форму и все работает. Но на этой странице есть модал, в который пользователь может войти и перенаправлен обратно на ту же страницу. Аутентификация выполняется через стороннюю систему, а затем, когда пользователь аутентифицируется, они перенаправляются обратно на ту же страницу, что и раньше. Когда это происходит, мы получаем ошибку "Обязательное поле формы защиты от подделки __RequestVerificationToken'отсутствует.". Пост работает правильно.
Есть мысли о том, что здесь не так?
1 ответ
Вы можете попытаться загрузить новый токен и всю страницу снова, правильно перенаправив, например, вместо return View("RegistrationForm", model);
в пострегистрационной части используйте return RedirectToAction("Index");
(при условии, что index-action используется по умолчанию).
РЕДАКТИРОВАТЬ
Прежде всего, почему антифогергентокен заполняется на странице входа в систему, где нет пользователя для защиты? Если нет правильной причины, вы не должны беспокоиться о проблеме в первую очередь.
Кроме того, вы должны проверить, как осуществляется перенаправление от провайдера аутентификации. Вы можете проверить это, например, с помощью сетевых инструментов Chrome и посмотреть, является ли это редиректом 307 в качестве поста или 302 Get или чем-то еще (?)
Все ли работает замечательно, если после проверки подлинности вы обновляете страницу в браузере (Ctrl+F5)?