1

如何从不安全的区域获取 app.user?

所以我有从 ^/user 开始的安全区域。

但我需要在每个人都可以访问且不安全的区域显示注销表单。这怎么可能?我的security.yml:

安全:
    编码器:
        Symfony\Component\Security\Core\User\User:明文
        ###:
            算法:sha512
            编码为base64:真
            迭代次数:10
        ###:
            算法:sha512
            编码为base64:真
            迭代次数:10

    角色层次结构:


    提供者:
      行政:
        名称:管理员
        实体:{类:###,属性:登录}
      用户:
        姓名:用户
        实体:{类:###,属性:登录}        

    防火墙:
      行政:
        模式:^/管理员
        表单登录:
          登录路径:###_登录
          check_path: ###_login_process
          default_target_path: /admin/dashboard
        匿名:~
        登出:
          路径:/admin/logout
          目标:/admin/login
        提供者:管理员
        记住账号:
            钥匙: ”###”
            寿命:604800
            小路: /
            域名:~
      用户:
        模式:^/用户
        表单登录:
          登录路径:###_登录
          check_path: ###_login_process
          默认目标路径:###
        匿名:~
        登出:
          路径:/用户/注销
          目标:/用户/登录
        提供者:用户
        记住账号:
            钥匙: ”###”
            寿命:604800
            小路: /
            域名:~             


    访问控制:        
        - { 路径:^/admin/login,角色:IS_AUTHENTICATED_ANONYMOUSLY }
        - { 路径:^/admin/,角色:ROLE_ADMIN }
        - { 路径:^/user/login,角色:IS_AUTHENTICATED_ANONYMOUSLY }
        - { 路径:^/user/,角色:ROLE_USER }                   
4

2 回答 2

1

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

      用户:
        模式:^/   


    访问控制:
        - {路径:^/,角色:IS_AUTHENTICATED_ANONYMOUSLY}
        ...

更新 1

似乎不需要 access_controll 中的那一行。此外,由于某种原因(可能是缓存)匿名用户正在访问 /user 区域

于 2012-07-28T17:02:59.640 回答
0

你可以在一些不安全的地方获取 app.user,因为 Symfony 的安全依赖于 2 种不同的机制:身份验证和授权。

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

Authorization is related to access_control rules. It is a second step, you can't put access control rules outside of a firewall. There you will deal with the ROLE requirement, in example if ROLE_ANONYMOUS is enoug, if you want ROLE_USER...

One more thing: to complexify a little further, a firewall can allow or disallow anonymous users. By default it is true, as it is required to have you login and login_check paths under yoru firewall though you cant' require there users to have a role other than ROLE_ANONYMOUS (if you do so, you will have an infinite loop).

于 2016-07-26T08:35:05.647 回答