无法从 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 如何从应用程序中完全注销用户