Check_path не находится за брандмауэром Symfony, как это исправить? - PullRequest
4 голосов
/ 16 октября 2011

Я пытаюсь пройти аутентификацию на брандмауэре 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 }

Ответы [ 3 ]

2 голосов
/ 17 октября 2011

Я думаю, вы должны изменить шаблоны маршрутов, чтобы включить параметр _locale. Например, вместо pattern: /admin/logincheck следует использовать pattern: {_locale}/admin/logincheck

Вы также можете отлаживать маршруты, используя консольную команду app/console router:debug.

Я не уверен на 100%, что это решит вашу проблему, но я надеюсь, что это поможет вам собрать больше информации о вашей проблеме.

0 голосов
/ 11 июня 2012

Это решило мою проблему, но моя ситуация проста и не имеет функциональности {_locale}, но, возможно, это все равно вам поможет.

Из главы «Безопасность» книги Symf2:
Распространенные ловушки # 3: Убедитесь, что / login_check находится за брандмауэром.

В вашем файле security.yml похоже, что ваш маршрут check_path является / {_ locale} / admin / logincheck, а ваш защищенный путь - это все, что находится за ^ / {_ locale} / admin /.* так что это кажется хорошим.
Возможно, вы захотите попробовать удалить. * (Вам это действительно нужно?)

и далее вниз по файлу в разделе контроля доступа вы указываете конкретную запись, чтобы убедиться, что check_path требует аутентификации - {путь: ^ / ar / admin / logincheck, роли: ROLE_ADMIN}
Возможно, попробуйте указать это вместо этого:
- {путь: ^ / {_ языковой стандарт} / admin / logincheck, роли: ROLE_ADMIN}

Но на самом деле, мне было интересно, можете ли вы даже использовать {placeholder} в значениях паттерна security.yml? Я знаю, что вы можете в файле маршрутизации, но я не уверен, если безопасность yml работает так же? Я не вижу его в каких-либо примерах в основной книге symf2 в главах о безопасности или маршрутизации?

0 голосов
/ 13 апреля 2012

Почему бы вам не попробовать

logincheck:
    pattern: /admin/login_check
    #defaults: { _controller: DaghoSiteBundle:Login:logincheck , _locale: ar }
    #requirements:
        #_locale: (ar|en|fr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...