Symfony2: Прозрачный процесс авторизации между поддоменами

Все!

Я просто вижу, что маршрутизатор symfony2 не использует хост-часть uri. Мне нужно отделить СТРАНУ как третий поддомен и локаль как первый элемент в пути маршрута

http://{country}.mysite.com/{_locale}/myaction, т.е.

en.mysite.com/en/action --- английские компании и английский язык

de.mysite.com/ru/action --- немецкие компании и русский язык

ru.mysite.com/uk/action --- русские компании и украинский язык

Проблема решена с помощью службы, как показано ниже:

-- config.yml

services:
   kernel.listener.subdomain_listener:
       class: Acme\DemoBundle\Listener\SubdomainListener
       tags:
           - { name: kernel.event_listener, event: kernel.request, method: onDomainParse }

-- SubdomainListener.php

<?php

namespace Acme\DemoBundle\Listener;

use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;

class SubdomainListener
{
   public function onDomainParse(Event $event)
   {
       $request = $event->getRequest();
       $session = $request->getSession();

       // todo: parsing subdomain to detect country

       $session->set('subdomain', $request->getHost());
   }
}

НО... Вопрос: как возможно (правильно) реализовать процесс AUTH между несколькими поддоменами прозрачно только один раз??

  1. пользователь вошел через en.mysite.com/{_locale}/...

  2. пользователь переходит на страницу de.mysite.com/{_locale}/..., но система знает о нем (ней) и больше не запрашивает учетные данные для входа/пароля

Мне кто-нибудь помогает? Спасибо за аванс! Сертифицированный старший разработчик/администратор баз данных Oracle


person Alexander Vasilenko    schedule 14.08.2011    source источник


Ответы (1)


Вы можете легко сделать это, установив правильный домен cookie. Таким образом, все поддомены смогут получить доступ к файлу cookie, который идентифицирует сеанс ваших пользователей.

Что вам нужно сделать, так это установить для домена cookie значение: .mysite.com (да, точка в начале).

Для этого установите следующую конфигурацию в файле config.yml:

framework:
    session:
        cookie_domain: .mysite.com

Примечание. Если вы используете Remember_me из компонента безопасности, вы, вероятно, захотите установить домен в отношении remember_me вашего брандмауэра.

Приложение: В Symfony 2.0 соответствующей настройкой был «домен». Он устарел в версии 2.1.

person igorw    schedule 14.08.2011