首页 文章

无法从不安全区域访问app.user

提问于
浏览
1

如何从不安全区域获取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 回答

  • 0

    您可以在某些不安全的区域中获取app.user,因为Symfony安全性依赖于两种不同的机制:身份验证和授权 .

    Authentication 由防火墙定义 . 一旦你进入防火墙,你就会得到一个令牌,最终得到一个app.user,即使它是 anonymous .

    Authorizationaccess_control 规则有关 . 这是第二步,您不能将访问控制规则放在防火墙之外 . 在那里你将处理ROLE要求,例如,如果 ROLE_ANONYMOUS 是enoug,如果你想 ROLE_USER ...

    还有一件事:为了进一步复杂化,防火墙可以允许或禁止匿名用户 . 默认情况下,这是真的,因为你在yoru防火墙下登录和登录_check路径是 required 虽然你不能要求用户拥有除_221527之外的其他角色(如果这样做,你将有一个无限循环) .

  • 1

    好吧,我改变了一点我的security.yml . 所以目前一切正常 .

    user:
            pattern: ^/   
    
    
        access_control:
            - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
            ...
    

    UPDATE 1

    看来access_controll中的行不是必需的 . 此外,由于某种原因(可能是缓存),匿名用户正在访问/用户区域

相关问题