如何从不安全区域获取app.user?
所以我确保了从^ / user开始的区域 .
但是我需要在每个人都可以访问的区域显示注销表单而不是安全的 . 这怎么可能?我的security.yml:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
###:
algorithm: sha512
encode-as-base64: true
iterations: 10
###:
algorithm: sha512
encode-as-base64: true
iterations: 10
role_hierarchy:
providers:
admin:
name: admin
entity: { class: ###, property: login }
user:
name: user
entity: { class: ###, property: login }
firewalls:
admin:
pattern: ^/admin
form_login:
login_path: ###_login
check_path: ###_login_process
default_target_path: /admin/dashboard
anonymous: ~
logout:
path: /admin/logout
target: /admin/login
provider: admin
remember_me:
key: "###"
lifetime: 604800
path: /
domain: ~
user:
pattern: ^/user
form_login:
login_path: ###_login
check_path: ###_login_process
default_target_path: ###
anonymous: ~
logout:
path: /user/logout
target: /user/login
provider: user
remember_me:
key: "###"
lifetime: 604800
path: /
domain: ~
access_control:
- { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, roles: ROLE_ADMIN }
- { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/, roles: ROLE_USER }
2 回答
您可以在某些不安全的区域中获取app.user,因为Symfony安全性依赖于两种不同的机制:身份验证和授权 .
Authentication 由防火墙定义 . 一旦你进入防火墙,你就会得到一个令牌,最终得到一个app.user,即使它是
anonymous
.Authorization 与
access_control
规则有关 . 这是第二步,您不能将访问控制规则放在防火墙之外 . 在那里你将处理ROLE要求,例如,如果ROLE_ANONYMOUS
是enoug,如果你想ROLE_USER
...还有一件事:为了进一步复杂化,防火墙可以允许或禁止匿名用户 . 默认情况下,这是真的,因为你在yoru防火墙下登录和登录_check路径是 required 虽然你不能要求用户拥有除_221527之外的其他角色(如果这样做,你将有一个无限循环) .
好吧,我改变了一点我的security.yml . 所以目前一切正常 .
UPDATE 1
看来access_controll中的行不是必需的 . 此外,由于某种原因(可能是缓存),匿名用户正在访问/用户区域