Укажите домен cookie в Authlogic при создании сеанса - PullRequest
4 голосов
/ 11 января 2010

Можно ли установить для домена cookie что-то, отличное от текущего домена, когда сеанс создается с Authlogic?

Когда новая учетная запись создается из нашего домена регистрации, я хотел бы перенаправить пользователя на его учетную запись субдомена и войти в систему.

Текущий контроллер:

def create
  @account = Account.new(params[:account])
  if @account.save
    @user_session = @account.user_sessions.create(@account.users.first)
    # I'd like the cookie domain to be [@account.subdomain, APP_CONFIG[:domain]].join(".")
    redirect_to admin_root_url(:host => [@account.subdomain, APP_CONFIG[:domain]].join("."))
  else
    render 'new'
  end
end

Ответы [ 3 ]

4 голосов
/ 04 февраля 2010

Если вы делаете:

config.action_controller.session[:domain] = '.YOURDOMAIN.COM'

в вашем файле production.rb, который позволит вам войти в систему на всех поддоменах вашего поддоменов. Если затем вы добавите фильтр (или что-то еще, но я использую фильтр, так что я знаю, что он работает), который проверяет, действительно ли кто-то использует нужный домен, прежде чем показывать содержимое контроллера, он работает довольно хорошо.

В качестве примера, вы можете сохранить соответствующий субдомен для сеанса в качестве переменной сеанса и дать людям возможность связывать их с конкретными вещами, если они находятся в вашем основном домене или смотрят страницу на чужом субдомене.

Похоже, что это общий шаблон для такого рода действий - если вы установите cookie, специфичные для субдомена, в противном случае вы не сможете определить, когда они вошли на основной сайт. У меня также есть помощник 'users_domain?', который иногда вызывает меня в представлениях, когда я делаю это.

Если вы не хотите иметь такие общие шаблоны веб-дизайна, одноразовое использование wesgarrion -> создание сеанса на поддомене - это тоже путь. Я просто подумал, что упомяну это как проблему дизайна / взаимодействия / кода.

0 голосов
/ 01 марта 2010

Если у вас есть приложение с несколькими поддоменами, и вы не хотите, чтобы сессионные куки-файлы распределялись между ними, или, что еще хуже, у вас есть куки-файл сессии .domain верхнего уровня с тем же сессионным ключом, плавающим рядом с вашим куки-файлом сессии субдомена (Railsоставьте одно и бросьте другое - я полагаю, что это просто на основе порядка в заголовке запроса) - вы можете использовать перехватчики диспетчера, чтобы принудительно использовать куки-файл сеанса для поддоменов.

Включить перехват в ActionController из расширения.

base.send :after_dispatch, :force_session_cookies_to_subdomains

Установите этот домен в своем обработчике after_.

@env['rack.session.options'] = @env['rack.session.options'].merge(:domain => 'my_sub_domain' end)

Для нас мы рассмотрим @env [HTTP_HOST], чтобы определить, каким должен быть [my_sub_domain].

При таком подходе вход пользователя в систему должен происходить на поддомене, чтобы браузер мог принять файл cookie с поддоменом (если только не используется шаблон, такой как Authlogic Params, для распространения наследующий запрос на поддомен).

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

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

request.env["rack.session"] = ActionController::Session::AbstractStore::SessionHash.new(self, request.env)

в фильтре после в ApplicationController.

0 голосов
/ 17 января 2010

Если вы хотите авторизовать их на поддомене, вы можете использовать одноразовый токен Authlogic.

В модуле Params приведен пример входа с использованием одноразового токена.

Естественно, ваше действие зарегистрирует их и создаст их сеанс (на поддомене), поэтому им не придется повторно проходить аутентификацию для следующего запроса.

Есть , опций для установки домена для куки в process_cgi () и session () , но я не вижу способа установить те по запросу в Authlogic. Аутлогический список рассылки довольно отзывчив, и это похоже на довольно стандартный сценарий использования, который кто-то там попробовал бы и понял. И я видел вашу заметку в группе Google, так что не берите в голову.

...