如何从不安全区域获取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 }
答案 0 :(得分:1)
我改变了一点我的security.yml。所以目前一切正常。
user: pattern: ^/ access_control: - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } ...
更新1
似乎不需要access_controll中的行。此外,由于某种原因(可能是缓存),匿名用户正在访问/用户区域
答案 1 :(得分:0)
您可以在某些不安全的区域获取app.user,因为Symfony安全性依赖于两种不同的机制:身份验证和授权。
身份验证由防火墙定义。一旦你进入防火墙,就会得到一个令牌,最终得到一个app.user,即使它是anonymous
。
授权与access_control
规则相关。这是第二步,您不能将访问控制规则放在防火墙之外。在那里,您将处理ROLE要求,例如,如果ROLE_ANONYMOUS
是enoug,则需要ROLE_USER
...
还有一件事:为了进一步复杂化,防火墙可以允许或禁止匿名用户。默认情况下,这是真的,因为必需让你在yoru防火墙下登录和登录_check路径,尽管你不能这样做。要求用户拥有ROLE_ANONYMOUS
以外的角色(如果你这样做,你将有一个无限循环)。