Неверная подлинность взята везде - PullRequest
4 голосов
/ 07 апреля 2010

У меня есть только что развернутое приложение rails, которое генерирует ошибки Invalid AuthenticityToken при отправке формы. Приложение использует субдомены в качестве имен учетных записей, а также в конечном итоге позволит ввести пользовательский домен. У меня есть запись в production.rb, чтобы разрешить междоменную обработку сеанса.

Проблема в том, что вы не можете войти или отправить какую-либо форму, потому что все вызывает ошибку Invalid AuthenticityToken. Проблема выглядит аналогично, но не так, как Rails - неверный токен аутентификации после развертывания плюс я не использую монгрел Я пытался очистить куки в браузере и перезапустить пассажира, но безуспешно.

У кого-нибудь есть идеи?

Сервер работает под управлением nginx + passenger 2.3.11 и Rails 2.3.5.

#production.rb
config.action_controller.session[:domain] = '.domain.com'


#environment.rb
config.action_controller.session = {
   :session_key => '_app_session',
   :secret      => '.... nums and chars .....'
 }

Обновление: Я только что заметил, что файл cookie сеанса не устанавливается в моей производственной среде. Таким образом, я предполагаю, что сессия не может быть привязана к значению CSRF. Я задаюсь вопросом, не связан ли файл cookie с моими динамическими поддоменами?

Ответы [ 3 ]

2 голосов
/ 08 апреля 2010

Убедитесь, что на вашем сервере настроено правильное доменное имя. Я видел это, когда cookie для токена аутентификации устанавливался для домена, отличного от того, на котором был сервер. Клиенты не поймут, что им нужно отправить куки.

Другая возможность заключается в том, что ваш производственный магазин сеансов каким-то образом поврежден. Если Rails не может найти сеанс пользователя, он потерпит неудачу с InvalidAuthenticityToken.

0 голосов
/ 07 апреля 2010

Попробуйте добавить следующее к вашему ApplicationController:

protect_from_forgery :only => [:create, :delete, :update]

Решение от http://www.ruby -forum.com / topic / 136093 . Помните, что это может быть не самое безопасное решение.

0 голосов
/ 07 апреля 2010

ПОПРОБУЙТЕ

<%= javascript_tag "window._token = '#{form_authenticity_token}'" %>

ИЛИ ССЫЛКУ: - http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html

...