【问题标题】:access_control in Symfony3 doesn't workSymfony3 中的 access_control 不起作用
【发布时间】:2016-08-01 15:58:57
【问题描述】:

我使用 Symfony 3,但在 app/config/security.yml 中使用 access_control 时遇到问题。

我安装了 FOSUserBundle,发现当用户具有角色IS_AUTHENTICATED_ANONYMOUSLY 时,路由 /login /resetting 和 /register 仍然可用。我使用the documentation 中解释的基本配置,但它不起作用:

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }

错误是否有可能来自另一个文件?我花了一周的时间寻找答案,但我不知道问题出在哪里。另外,我尝试从头开始在另一个项目上重新安装 Symfony,只是为了尝试使用全新的配置,但发生了同样的错误。

感谢您的帮助!

Screenshot

【问题讨论】:

  • 默认情况下,路由/login/resetting/register即使在登录状态下也是可用的。你说收到什么错误?
  • 我没有收到任何错误,我可以成功登录,但是我仍然可以访问这些路由,并且用户名显示在表单上方,并带有一个注销链接。也就是说,我可以重新登录……
  • 到底是什么问题?听起来没有任何问题,因为您说设置为匿名时可以访问这些路由,这是正确的...
  • 也许我的英语有点混乱,因为我是法国人。我的意思是当我登录时我应该无法访问那些路由。我还附上了一个截图给你看。

标签: php security routes fosuserbundle symfony


【解决方案1】:

默认情况下,/login/resetting/register 路由将在登录后继续可用。

如果你不想这样,你可以做几件事:

【讨论】:

    【解决方案2】:

    没有任何问题,你访问这些路由被认证与否是很正常的:

    IS_AUTHENTICATED_ANONYMOUSLY:所有用户(甚至匿名用户)都有 this - 这在将 URL 列入白名单以保证访问时很有用

    这是最低级别的角色。

    但是,如果您想在访问正在登录的 /login 时被重定向到 /admin,则可以在管理登录的函数中执行此操作

    if ($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) {
       return $this->redirect($this->generateUrl('your_route_path_to_admin'));
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-31
      • 1970-01-01
      • 2016-03-14
      • 2023-03-12
      • 1970-01-01
      • 2014-10-08
      • 2016-09-23
      • 1970-01-01
      • 2016-12-20
      相关资源
      最近更新 更多