Symfony2: прозрачный процесс авторизации между поддоменами - PullRequest
2 голосов
/ 14 августа 2011

All!

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

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

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

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

ru.mysite.com / ru / 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/ndom_locale‹/...

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

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

1 Ответ

15 голосов
/ 14 августа 2011

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

То, что вы хотите сделать, это установить домен cookie: .mysite.com (да, точка в начале).

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

framework:
    session:
        cookie_domain: .mysite.com

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

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

...