2016-06-30 20 views
0

У меня был <%= csrf_meta_tags %> в моем теге HEAD, но я создал форму вручную, поэтому скрытое поле authenticity_token не было вставлено в мою форму.Adde токен аутентификации вручную, но он не подтвержден в backend

Так я добавил authenticity_token вручную:

<input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden"> 

При отправке контакта по умолчанию форму моего веб-сайта (пользователь не вошел в систему) действие, которое обрабатывает его следует проверить маркер и разрешить/отклонить запрос. Но это не так: я использую jQuery для удаления поля и отправки формы, но не ошибки и исключения.

Я получил эту линию protect_from_forgery with: :exception в application_controller.rb и поставить то же самое в foo_controller.rb, который простирается application_controller и имеет действие, которое реагирует на контактную форму.

Так что мне не хватает? Что мне нужно сделать, чтобы эта форма была проверена в бэкэнд?

Большое спасибо!

+0

Вам не нужно 'protect_from_forgery с:: exception' в' foo_controller.rb', если у него есть контроллер приложения. Ваша настройка, как правило, правильная, но ее трудно сказать больше без вашего вида формы/кода JavaScript, пожалуйста, добавьте его. –

ответ

0

Когда переданный токен аутентификации отсутствует или не совпадает с таковым в сеансе, Rails делает то, что указывает protect_from_forgery with:, но обработка запроса не прекращается. Случается, что сеанс уничтожается, поэтому запрос обрабатывается как принадлежащий не зарегистрированному пользователю.

Вот отличный отчет о обсуждении how protect_from_forgery works.

Трудно сказать, не глядя на код, но я бы сказал, что ваш код отправки формы не принимает значение входного токена авторизации или он становится устаревшим перед запросом. Последнее может иметь место в ряде сценариев, таких как страница, загруженная из кеша браузера или вкладки браузера, используемые для входа/выхода в систему параллельно с рассматриваемой страницей.