Исключение 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. Я также попытался добавить скрытое поле с токеном, как было предложено в ответе. Но я все еще получаю ошибка.

Для отладки пробовал и это решает проблему. Но, конечно, я не хочу пропускать это в продакшене.

Каков правильный и безопасный способ отправки форм через фреймы?

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