Symfony2:子域之间的透明授权过程

Ale*_*nko 2 php subdomain authorization symfony

所有!

我只是看到symfony2路由器不使用uri的主机部分.我需要将COUNTRY分隔为第三个子域,将locale分隔为路径路径中的第一个元素

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

en.mysite.com/en/action ---英语公司和英语

de.mysite.com/ru/action --- deutschland公司和俄语

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());
   }
}
Run Code Online (Sandbox Code Playgroud)

但是......问题是:如何在几个子域之间透明地实现AUTH进程一次只能进行一次?

  1. 用户通过en.mysite.com/{_ locale}/...登录

  2. 用户访问de.mysite.com/{_ locale}/...但是系统知道他(她)并且没有再次询问登录/密码凭据

有人帮帮我吗?谢谢你提前!认证高级Oracle开发人员/ DBA

igo*_*orw 15

您可以通过设置正确的cookie域轻松完成此操作.这样,所有子域都可以访问标识用户会话的cookie.

你想要做的是将你的cookie域设置为:( .mysite.com是的,开头的一个点).

为此,请在config.yml文件中设置以下配置:

framework:
    session:
        cookie_domain: .mysite.com
Run Code Online (Sandbox Code Playgroud)

注意:如果您使用的是安全组件中的remember_me,则可能需要在remember_me防火墙部分设置域.

附录:在Symfony 2.0中,相关设置为"域名".它在2.1中被弃用.