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

Posted

技术标签:

【中文标题】无法从 Symfony 2 上的内存登录中注销【英文标题】:Can't logout from In Memory login on Symfony 2 【发布时间】:2014-05-21 15:12:07 【问题描述】:

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

当我使用 In Memory 登录到管理员时,这可以工作,但我无法注销。

另一方面,用户注销非常有效。我错过了什么吗?

这是我的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 

【问题讨论】:

你用的是什么版本的 symfony? 见***.com/questions/233507/… Symfony2 logout issue的可能重复 【参考方案1】:

正如 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 和会话,并且不会自动让您重新登录.

【讨论】:

类似的答案并不意味着您可以像复制自己的话一样复制别人的话。那是抄袭,根本不行。 @Chausser:不,因为浏览器缓存登录凭据的部分不属于他,这是事实而不是想法。他提出的建议可能是他自己的。但你所做的却是整段抄他自己的话。既然你已经正确引用了他,那就没问题了。 invalidate_session 参数默认为true。

以上是关于无法从 Symfony 2 上的内存登录中注销的主要内容,如果未能解决你的问题,请参考以下文章

Symfony3 onSecurityInteractiveLogin注销并设置flash

使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)

Symfony 4.4 Auth0 如何从应用程序中完全注销用户

[Symfony 5]注销后的确认信息

使用 Symfony 框架在生产服务器上的用户登录失败(身份验证请求无法处理,因为...)

如何使用它的内部处理程序将用户从 Symfony 2 应用程序中注销