Исключение ActionController::InvalidAuthenticityToken в сафари при использовании iframe
Хотя я разместил форму из iframe в сафари, она дает исключение Invalid Authenticity Token. Если я попробую без iframe, то все работает нормально.
Почему это происходит? Как я могу это исправить?
2 ответа
Маркер подлинности - это механизм, который rails использует для защиты пользователей от CSRF-атак. Вот хорошее объяснение, взятое из Понимания токена подлинности Rails
Когда пользователь просматривает форму для создания, обновления или уничтожения ресурса, приложение rails создаст случайный authenticity_token, сохранит этот токен в сеансе и поместит его в скрытое поле в форме. Когда пользователь отправляет форму, rails будет искать authenticity_token, сравнивать его с тем, который хранится в сеансе, и, если они совпадают, запрос может продолжаться.
Таким образом, для любого действия, которое может изменить ваши рельсы модели, необходимо убедиться, что это изменение, созданное вами.
Rails делает это (с помощью form_for
или же form_tag
помощники), добавив этот секретный токен подлинности в форму с HTML-тегом, например: <input name="authenticity_token" type="hidden" value="Som3Thin10ngAndUGly">
Возвращаясь к вашей проблеме: я никогда не работал с iframe, поэтому я не уверен, что происходит, но я предполагаю, что ваша форма iframe не передает authencity_token. Если это так, то решение простое, просто добавьте скрытый ввод, подобный приведенному выше, и используйте form_authenticity_token
способ установить его значение.
Есть новые идеи по решению этой проблемы?
У меня есть iframe, и он содержит метатег csrf. Я также попытался добавить скрытое поле с токеном, как было предложено в ответе. Но я все еще получаю
Для отладки пробовал
Каков правильный и безопасный способ отправки форм через фреймы?