【问题标题】:Authenticating to specific subdomain in Symfony在 Symfony 中对特定子域进行身份验证
【发布时间】:2012-03-14 17:41:39
【问题描述】:

这似乎是一个足够简单的问题,但我似乎无法在任何地方找到明确的答案。

我正在编写一个应用程序,该应用程序将由拥有多个用户的多家公司使用。每家公司及其用户只能访问其数据。我希望每家公司都有自己的子域:即 company1.myapp.com、company2.myapp.com 等

当他们输入该 URL 时,我使用子域从数据库获取用户信息,然后他们可以从那里登录。我将他们的公司 ID(子域)设置为会话变量,以便应用知道哪些数据它应该从数据库中提取

我无法解决的问题: - 如何将身份验证锁定到一个子域?即一旦通过身份验证,如果我将域从 company1.myapp.com 更改为 company2.myapp.com 如何确保系统知道用户仅通过 company1 身份验证?

任何指针表示赞赏。

谢谢, 格雷格

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    ACL(Access Control Lists) 是您的答案。我链接的相关食谱条目包含您需要的所有信息。

    【讨论】:

    • 不幸的是,我没有使用学说,所以 ACL 对我没有好处。我找到了另一个使用似乎可以工作的侦听器的解决方案,我将作为答案发布。不过感谢您的回复!
    • 好吧,你可以在没有 Doctrine 的情况下使用它,就像所有其他 Symfony 组件一样。你已经找到了一个解决方案,所以无论什么都适合你(:
    • 在引导标题下有一个很大的注释说“ACL 系统需要配置至少一个 Doctrine DBAL 连接。”这足以让我失望!再次感谢您的回复。
    【解决方案2】:

    感谢Symfony forums 的一些帮助,我似乎可以使用侦听器进行这项工作。

    定义监听器#config.yml——注意优先级,否则页面似乎在终止会话之前呈现。

    services:        
      company_listener:
        class: myApp\SecurityBundle\Controller\CompanyListener
        arguments: 
            security: "@security.context", 
            container: "@service_container"
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 64 }
    

    监听类

    class CompanyListener extends controller
    {
    
    public static $companyID;
    private $securityContext;
    protected $container;
    
    public function __construct(SecurityContext $context, $container)
    {
        $this->securityContext = $context;
        $this->container = $container;
    }
    
    public function onKernelRequest(GetResponseEvent $event)
    {       
    
        $request = $event->getRequest();
        $session = $request->getSession();              
    
        $currentHost = $request->getHost();
    
        if(is_object($session)){
            $companyID = $session->get('companyID');
            $sessionHost = $session->get('subdomain');
    
            if ($sessionHost != $currentHost) {
                $this->get('request')->getSession()->invalidate();
            }           
        }
    
        $session->set('company', $currentHost);
    
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2014-10-25
      • 1970-01-01
      • 2012-01-05
      • 2017-08-31
      相关资源
      最近更新 更多