Rails 3 protect_from_forgery не работает правильно? - PullRequest
5 голосов
/ 22 мая 2011

Я использую Rails 3.0.2 с protect_from_forgery по умолчанию в application_controller.rb.

Я хотел вызвать InvalidAuthenticityToken.Для этого я добавил этот JavaScript на свою страницу:

$('input[name=authenticity_token]').val('aaa')

Проверка DOM с помощью Firebug Я вижу, что скрытое поле authenticity_token корректно обновляется.

Если я отправляю форму и проверяю журнал с сервера, я вижу, что относительный параметрправильно установлен на «ааа».Я ожидаю получить InvalidAuthenticityToken, пока запрос обрабатывается так, как он был правильным!

Как это возможно?

Ответы [ 2 ]

12 голосов
/ 23 мая 2011

Документация для поведения токена подлинности / csrf устарела. В этих случаях исключение InvalidAuthenticityToken больше не генерируется, вместо этого ваш сеанс просто сбрасывается. Если вы хотите обрабатывать это иначе (или по-старому), вы можете определить свое собственное поведение в handle_unverified_request на вашем контроллере.

1 голос
/ 03 апреля 2012

Я также считаю, что вам нужно будет сбросить токен Authenticity, который находится в метатеге HTML-страницы, на которой находится ваша форма (я предполагаю, что у вас есть <% = csrf_meta_tag%> там).Rails проверяет, совпадает ли токен в форме (который вы изменили в своем javascript выше) или токен в метатеге html-страницы с ожидаемым токеном аутентификации Rails, и если ЛЮБОЙ из них совпадает, то ваш InvalidAuthenticityToken выиграл 'не сработать ....

...