Проблема с токеном подделки

У меня есть форма на моей странице, которая определяется следующим образом:

 @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)?

Другие вопросы по тегам