【问题标题】:check_path not found with multiple firewalls in Symfony 2Symfony 2 中的多个防火墙未找到 check_path
【发布时间】:2014-03-10 18:27:55
【问题描述】:

我正在尝试在 Symfony 2 中设置后端和前端防火墙系统。我有两个登录表单,一个用于前端,另一个用于管理控制面板。不同的供应商等等。我的配置如下:

security:
    firewalls:
        backend:
            pattern:    ^/admin
            anonymous:  true
            provider:   admin_users
            form_login:
                login_path: /admin/login
                check_path: /admin/login_check
                default_target_path: /admin

        secured_area:
            pattern:    ^/
            provider:   normal_users
            anonymous:  true
            form_login: ~

    access_control:
        - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }

还有我的 routing.yml:

login:
    path:     /login
    defaults: { _controller: MyFrontendBundle:Default:login }

login_check:
    path:     /login_check

admin_login:
    path:     /admin/login
    defaults: { _controller: MyBackendBundle:Default:login }

admin_login_check:
    path:     /admin/login_check

看起来不错,但我遇到以下错误:找不到路径“/admin/login_check”的控制器。可能你忘记在路由配置中添加匹配的路由了

有什么想法吗? :)

【问题讨论】:

  • 我猜你的模式应该是pattern: ^/admin.*
  • 这条路线是否出现在app/console router:debug
  • 如果您在后端防火墙中使用此模式:pattern: /admin/.*
  • 不,模式似乎不是问题。
  • 当我尝试使用具有重叠 url 模式的防火墙并且第一个防火墙没有 check_path(我在第一个防火墙中使用 http_basic)和第二个使用 form_login 时,我遇到了类似的问题。您的 url 映射似乎是正确的,请检查您的管理控制器中是否有正确的 check_path (/admin/login_check)。

标签: php symfony


【解决方案1】:

我在项目中使用的这个解决方案。希望这也适用于两个登录表单。

为控制器添加存根

admin_login_check:
    path:     /admin/login_check
    defaults: { _controller: AcmeDemoBundle:Default:adminLoginCheck }

动作存根。永远不会执行此操作,但“找不到控制器”错误将消失。

// src/Acme/DemoBundle/Controller/DefaultController.php
public function adminLoginCheckAction()
{
    return $this->redirect($this->generateUrl('admin_login'));
}

【讨论】:

  • 问题是……动作实际上已经达到了。
  • @vinnylinux 您能否通过逐步说明如何重现该错误来更新您的问题。
  • 只需使用 AcmeDemoBundle 并添加第二个防火墙。
【解决方案2】:

你的url映射好像是对的,

请检查您的管理控制器中的check_path (/admin/login_check) 是否正确。

尝试如下在access_control下添加login_check,

- { path: ^/admin/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY }

当我尝试使用具有重叠 url 模式的防火墙时,我遇到了类似的问题。第一个防火墙没有 check_path(我在第一个防火墙中使用 http_basic),而在第二个防火墙中我使用的是 form_login。我不得不更改 URL 映射。

【讨论】:

    【解决方案3】:

    删除“/”可能还不错,所以你只有:

    login_path: admin/login
    check_path: admin/login_check
    default_target_path: admin
    

    让模式属性保持原样。这实际上是我的security.yml 的样子,并且可以解释路由问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 2015-09-09
      • 2022-08-20
      相关资源
      最近更新 更多