Symfony2 - 退出一个防火墙

ant*_*ony 4 security authentication firewall symfony

我的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
Run Code Online (Sandbox Code Playgroud)

pag*_*uca 9

解决方案是添加以下配置行:

invalidate_session: false
Run Code Online (Sandbox Code Playgroud)

(参考: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!
             ...
Run Code Online (Sandbox Code Playgroud)