2015-08-04 3 views
2

Это мой security.ymlInvalidConfigurationException с конфигурацией безопасности Symfony2

security: 
    providers: 
     in_memory: 
      memory: ~ 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     admin_login: 
      pattern: ^/admin/login$ 
      http_basic: ~ 

     admin: 
      pattern: ^/admin 
      form_login: 
       login_path: /admin/login 
       check_path: /admin/loginCheck 

     account: 
      pattern: ^/account 
      http_basic: ~ 

      # form_login: 
      #  login_path: /login 
      #  check_path: /loginCheck 

     main: 
      anonymous: ~ 

Все в порядке, но когда я изменяю брандмауэр ^/счета использовать form_login вместо http_basic, это выбросить некоторые исключения:

1/2 LogicException in MainConfiguration.php line 333: The check_path "/loginCheck" for login method "form_login" is not matched by the firewall pattern "^/account". 
2/2 InvalidConfigurationException in BaseNode.php line 313: Invalid configuration for path "security.firewalls.account": The check_path "/loginCheck" for login method "form_login" is not matched by the firewall pattern "^/account". 

Я знаю, что документация по Symfony2 рекомендуется использовать только один и только один главный брандмауэр, но эта конфигурация предназначена только для исследования нескольких брандмауэров.

Я думаю, что сценарий:

  1. Enter ^/админ, так как ^/администратор брандмауэра требует form_login поэтому перенаправляет ^/админ/входа в систему брандмауэра.
  2. ^/admin/login брандмауэр требует http_basic, поэтому пользователям необходимо ввести свое имя пользователя & пароль для просмотра формы ^/admin/login.
  3. Введите ^/счет, потому что брандмауэр ^/учетной записи требуется form_login поэтому перенаправляет ^/входа (основной брандмауэр)

Я не знаю, выше сценарий является правильным? Как исправить эту ошибку? Пожалуйста, помогите мне, спасибо!

ответ

2

Если я прав, вы не можете пройти аутентификацию на одном брандмауэре, а затем использовать токен на втором. Как только компонент безопасности аутентифицирует вас на одном, он прекратит обработку других брандмауэров.

Наличие нескольких брандмауэров совершенно законно, но их контексты будут полностью разделены.

Что касается ошибки, Symfony2 определяет, что форма входа в систему по URL должна находиться в префиксе брандмауэра. Если у вас был брандмауэр с префиксом /account/, ваша форма входа должна быть чем-то под этим префиксом, например. /account/login. Затем, используя список управления доступом в нижней части security.yml, вы должны включить anonymous доступ к этой форме входа.

Надеюсь, это немного прояснит ситуацию ...

+0

Большое вам спасибо, он отлично работал! Компонент безопасности Symfony2 настолько сложный, я думаю, что команде Symfony2 необходимо добавить дополнительную документацию об этом компоненте. – Geany

+0

Рад, что я мог бы помочь;) –