Rails 3, нет локального куки-файла сессии с: domain =>: all - PullRequest
4 голосов
/ 17 ноября 2010

У меня есть приложение Rails3, которое использует субдомены. Чтобы логины и т. Д. Работали во всех поддоменах, я делаю это в config/initializers/session_store.rb

MyApp::Application.config.session_store :cookie_store, :key => '_myapp_session', :domain => :all

Когда я развертываю свое приложение в Heroku, это работает отлично. Я могу войти и оставаться в системе через поддомен.

Однако при локальной разработке это не работает.

Мой браузер правильно установил cookie сессии:

$ curl http://test.lhs.com/users/sign_in
...
Set-Cookie: _myapp_session=BAh...3ed; domain=.lhs.com; path=/; HttpOnly
...

Однако мой браузер (я пробовал Safari, FireFox и Chrome) не устанавливает этот файл cookie. Поэтому, когда я вхожу в систему, я получаю ошибку InvalidAuthenticityToken.

Я попытался удалить часть :domain => :all, которая правильно устанавливает cookie сеанса, но только для текущего субдомена. Установка этого значения в явном виде :domain => '.lhs.com' также не устанавливает cookie.

Я в недоумении. Почему это работает в производстве на героку, а не локально. Я даже пробовал разные серверы (Webrick с rails server и автономный пассажир). Я также попытался запустить локально на порту 80 вместо 3000, но это также не имеет значения.

Есть какие-нибудь подсказки, почему cookie сессии не устанавливается локально? Спасибо!

Ответы [ 4 ]

3 голосов
/ 21 декабря 2010

Когда в Rails 3.0.3 установлено значение :domain => :all, локальные файлы cookie сеанса, похоже, не будут установлены, если вы не укажете домен верхнего уровня в браузере. Это может быть как задумано, хотя я не вижу никакой документации в любом случае.

Таким образом, ваш сеанс завершится неудачно, когда вы зайдете на localhost, но он должен быть установлен нормально в mylaptop.local. Кажется, что ".local" удовлетворяет требованию для TLD.

2 голосов
/ 20 июля 2012

В Rails есть ошибка, когда :domain => :all не работает при посещении сайта как localhost или IP-адрес:

https://rails.lighthouseapp.com/projects/8994/tickets/6002-patch-ignore-domain-all-option-if-host-is-ip-address-or-localhost

Похоже, что патч был отправлен, но я не могу сказать с этой страницы, включен ли он в какие-либо релизы.

Как вы обнаружили, решение состоит в том, чтобы отредактировать / etc / hosts так, чтобы он включал что-то вроде localhost.localdomain или что-то еще, кроме простого имени хоста (например, lhs.me).

1 голос
/ 07 декабря 2012

В config / intializers / session_store.rb установите свой домен для использования всех поддоменов

Your::Application.config.session_store :cookie_store, 
                                       :key => '_example.com_session',  
                                       :domain => ".lvh.me"

Не забудьте указать . перед именем хоста.

1 голос
/ 17 ноября 2010

Я не уверен, в чем здесь проблема, но я изменил «lhs.com» на «lhs.me» и переместил его ниже официального определения local2 в моем файле hosts. Не все это работает как шарм.

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