【问题标题】:Check_path isn't behind symfony's firewall , how to correct this?Check_path 不在 symfony 的防火墙后面,如何解决这个问题?
【发布时间】:2011-10-16 13:42:36
【问题描述】:

我正在尝试针对 symfony2 防火墙进行身份验证,这是我的安全配置

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
    providers:
        in_memory:
            users:
                user:  { password: user, roles: [ 'ROLE_USER' ] }
                admin: { password: admin, roles: [ 'ROLE_ADMIN' ]}
        #main:
            #entity: { class: Surgeworks\CoreBundle\Entity\User, property: username}
    firewalls:
        public:
           pattern: .*
           security: false
           anonymous: true
           form_login:
                check_path: /{_locale}/admin/logincheck
        login:
           pattern: ^/{_locale}/admin/login$
           security: false
           anonymous:  ~
        dev:
           pattern:  ^/(_(profiler|wdt)|css|images|js)/
           security: false
           anonymous:  ~
        secured_area :
            provider:   in_memory
            pattern: ^/{_locale}/admin/.*
            form_login:
                check_path: /{_locale}/admin/logincheck
                login_path: /{_locale}/admin/login
            logout:
                path : /{_locale}/admin/logout
                target : /{_locale}/admin/
            remember_me:
               key:      aSecretKey
               lifetime: 3600
               path:     /admin/
               domain:   ~ # Defaults to the current domain from $_SERVER 
    access_control:
        - { path: ^/{_locale}/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/{_locale}/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/ar/admin/logincheck, roles: ROLE_ADMIN }
        - { path: ^/(ar|en|fr)/admin/, roles: ROLE_ADMIN }

这是我在DaghoSiteBundle/Resources/config/routing.yml 中的路由:

_admin:
    pattern: /admin/
    defaults: { _controller: DaghoSiteBundle:Login:login , _locale : ar }
    requirements:
     _locale: (ar|en|fr)
login:
    pattern: /admin/login
    defaults : { _controller: DaghoSiteBundle:Login:login , _locale : ar }
    requirements:
        _locale: (ar|en|fr)
logincheck:
    pattern: /admin/logincheck
    #defaults: { _controller: DaghoSiteBundle:Login:logincheck , _locale: ar }
    #requirements:
        #_locale: (ar|en|fr)
logout:
    pattern: /admin/logout

我无法通过这些设置登录, 它总是抛出异常

找不到路径“/ar/admin/logincheck”的控制器。也许 您忘记在路由配置中添加匹配的路由

即使设置了路由check_path页面>>我也可以查看check_path而不被重定向到登录页面..

/en/admin >> login page 
/en/logincheck >> display the logincheck template (i.e  /en/logincheck isn't behind firewall )

如何修复或调试此问题,请指教

更新: 抱歉,我可能会忘记写我已经像这样在我的捆绑包前面加上了{_locale} 在我的 routing.yml 中

DaghoSiteBundle:
    resource: "@DaghoSiteBundle/Resources/config/routing.yml"
    prefix:   /{_locale}
    requirements:
        _locale: ar|en|fr
    defaults: { _locale: ar }

【问题讨论】:

  • as pattern 接受正则表达式,不能在其中使用 {placeholder}

标签: security authentication symfony


【解决方案1】:

我认为您必须更改路由模式以包含您的 _locale 参数。例如,您应该使用 pattern: {_locale}/admin/logincheck 而不是 pattern: /admin/logincheck

您还可以使用控制台命令app/console router:debug 来调试您的路由。

我不能 100% 确定这可以解决您的问题,但我希望它可以帮助您收集有关您的问题的更多信息。

【讨论】:

    【解决方案2】:

    你为什么不试试

    logincheck:
        pattern: /admin/login_check
        #defaults: { _controller: DaghoSiteBundle:Login:logincheck , _locale: ar }
        #requirements:
            #_locale: (ar|en|fr)
    

    【讨论】:

      【解决方案3】:

      这解决了我的问题,但我的情况很简单,没有 {_locale} 功能,但也许它会帮助你。

      来自 Symf2 书籍的安全章节:
      常见陷阱 #3:确保 /login_check 位于防火墙后面。

      在您的 security.yml 文件中,您的 check_path 路径看起来像是 /{_locale}/admin/logincheck,而您的安全路径是 ^/{_locale}/admin/.* 后面的任何内容 所以这似乎很好。
      您可能想尝试删除 .*(您真的需要它吗?)

      在访问控制部分的文件下方,您提供特定条目以确保 check_path 需要身份验证: - { 路径:^/ar/admin/logincheck,角色:ROLE_ADMIN }
      也许可以尝试指定这个:
      - { 路径:^/{_locale}/admin/logincheck,角色:ROLE_ADMIN }

      但实际上,我想知道,你甚至可以在 security.yml 模式值中使用 {placeholders} 吗?我知道你可以在路由文件中使用,但我不确定安全性是否yml 的工作方式相同吗?我没有看到它在安全或路由章节的主要 symf2 书中的任何示例中使用?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-07
        相关资源
        最近更新 更多