【问题标题】:Symfony2 - Logging out of one firewallSymfony2 - 注销一个防火墙
【发布时间】:2013-06-16 03:00:14
【问题描述】:

我的 Symfony2 项目中有两个防火墙,“admin”和“client”。它们都使用相同的实体提供程序。

我遇到的问题是,当我退出一个防火墙时,我也会退出另一个防火墙。我不希望这样。

我的实施或策略有问题吗?我确实尝试过拥有一个防火墙并通过用户角色管理对管理员和客户区域的访问的想法。但是,这并不能避免我上面描述的注销场景。

下面是我的 security.yml(有点简化)。

    admin:
        pattern: ^/admin
        form_login:
            provider:      acme_userbundle
            login_path:    admin_login
            check_path:    admin_security_check
        logout:
            path:   admin_logout
            target: admin_login
        anonymous: false

    client:
        pattern: ^/client
        form_login:
            provider:      acme_userbundle
            login_path:    client_login
            check_path:    client_security_check
        logout:
            path:   client_logout
            target: client_login
        anonymous: false

【问题讨论】:

    标签: security authentication symfony firewall


    【解决方案1】:

    解决方案

    解决方法是添加如下配置行:

    invalidate_session: false
    

    (参考:http://symfony.com/doc/current/reference/configuration/security.html)

    该行应该添加到每个防火墙的logout 配置块中。这样,当您从其中一个注销时,会话不会被破坏,而您将保持在其他会话上的登录状态。

    示例

    security:
        ...
        firewalls:
            ...
            admin:
                pattern: ^/admin
                ...
                logout:
                    path:   admin_logout
                    ...
                    invalidate_session: false #This line should do the trick!
                ...
    
             client:
                 pattern: ^/client
                 ...
                 logout:
                     path:   client_logout
                     ...
                     invalidate_session: false #This line should do the trick!
                 ...
    

    【讨论】:

      【解决方案2】:

      以下解决方案在 Sf 2.0.x 中有效,但我不确定它是否仍然有用...

      当您登录时,您的会话会被识别,并且会为每个防火墙创建一个名为“security_”的安全条目。因此,在您的情况下,要从客户区注销,您可以通过以下方式实现:

      // $session is Session service from container
      $session->remove('security_client');
      

      【讨论】:

      • 检查我的答案以了解记录的方法。
      猜你喜欢
      • 2018-10-31
      • 1970-01-01
      • 2015-09-09
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多