Почему метод post очищает мои данные сессий rails? - PullRequest
6 голосов
/ 22 февраля 2011

После того, как пользователь вошел в систему и его имя пользователя аутентифицировано и сохранено в сеансе [: user_name], при отправке формы с методом = "post" (с использованием стандартного html) все данные сеанса очищаются и пользователь перенаправляется обратно к логинустр.Этого не происходит, если для метода установлено значение get.

Post работает, когда я использую rails "form_tag", который генерирует следующие дополнительные строки:

<div style="margin: 0pt; padding: 0pt; display: inline;">
<input type="hidden" value="✓" name="utf8">
<input type="hidden" value="a_bunch_of_gibberish" name="authenticity_token">
</div>

Что происходит?

Ответы [ 2 ]

9 голосов
/ 22 февраля 2011

Используете ли вы Rails 3.0.4? Похоже, это может быть связано с CSRF исправить .

Если вам нужно исправление, соответствующее вашим потребностям, вы можете перезаписать #handle_unverified_request в вашем контроллере. Смотри https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/request_forgery_protection.rb.

Вот пример , где эта проблема была с OmniAuth и OpenId. (См. Раздел «Защита CSRF в Rails 3.0.4»)

6 голосов
/ 16 декабря 2013

Эта проблема также может возникнуть, если вы создаете собственную HTML-форму.

Если вы получаете перенаправление, не зная, почему, это из-за "protect_from_forgery" в вашем ApplicationController

Чтобы разрешить отправку формы, добавьте в нее следующий код (или используйте form_tag, пояснение ниже):

<form ... >
...
<%= hidden_field_tag "authenticity_token", form_authenticity_token %>
...
</form>

Причина, по которой работает "form_tag", заключается в том, что form_tag генерирует скрытое поле для вас =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...