无法从Symfony 2上的内存登录中注销

时间:2014-04-08 18:23:24

标签: php security symfony admin logout

我的管理包上有一点注销问题。

当我使用内存登录管理员时,这有效,但我无法注销。

另一方面,用户注销工作完美。我错过了什么吗?

这是我的security.yml

security:
encoders:
    Esimed\FrontBundle\Entity\Company: 
        algorithm: sha1
        encode_as_base64: false
        iterations: 1
    Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    companies:
        entity: { class: Esimed\FrontBundle\Entity\Company, property: email }
    in_memory:
        memory:
            users:
                admin: { password: adminpass, roles: 'ROLE_ADMIN' }

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    admin:
        pattern: ^/admin
        http_basic:
            realm: "Administration"
            provider: in_memory
        logout:
            invalidate_session: true
            path: /admin/company/logout
            target: /
        anonymous: ~

    main:
        pattern: ^/
        form_login:
            check_path: esimed_front_company_login_check
            login_path: esimed_front_company_login
        logout:
            path: /company/logout
            target: /
        anonymous: ~

access_control:
    - { path: ^/company/add$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/company/create$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/company/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/job/view/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/company/search, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/company/category-list, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/company/company-list, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/company, roles: ROLE_COMPANY }
    - { path: ^/job, roles: ROLE_COMPANY }
    - { path: ^/admin, roles: ROLE_ADMIN }

1 个答案:

答案 0 :(得分:3)

作为Elnur Abdurrakhimov陈述similar question的答案:

  

由于您使用的是HTTP身份验证,原因可能是您的身份验证   浏览器自动缓存您的凭据并重新登录。尝试使用   HTML表单身份验证,并查看问题是否仍然存在。

尝试将以下内容用于security.yml

admin:
    pattern: ^/admin
    provider: in_memory
    form_login:
        check_path: /check_login
        login_path: /admin/login
    logout:
        invalidate_session: true
        path: /admin/company/logout
        target: /
    anonymous: ~

...

access_control:
    - { path: ^/admin/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    ...

通过这种方式,您仍然可以使用内存提供程序进行身份验证,如果您需要,您仍然可以通过浏览器保存您的凭据,但是注销会破坏用于对您进行身份验证的cookie和会话,并且不会自动将您重新登录