У меня есть эти маршруты, определенные в app/config/routing.yml
в Symfony 2.8 приложения:Как отлаживать (и исправлять) Symfony2 | 3 маршрута?
platform_chat:
resource: "@PlatformChatBundle/Controller/"
type: annotation
prefix: /chat
platform_admin:
resource: "@PlatformAdminBundle/Controller/"
type: annotation
prefix: /admin
#----> this is part of routing.yml but I forgot to add it
easy_admin_bundle:
resource: "@PlatformAdminBundle/Controller/AdminController.php"
type: annotation
prefix: /admin
#FOSUser
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
Как вы уже заметили, PlatformAdminBundle
является бэкенд и PlatformChatBundle
является интерфейс. Имея это в виду, я стараюсь setuo и использовать один брандмауэр для обоих, а затем на security.interactive_login
событие перенаправить на правильный маршрут | путь. Это как брандмауэр выглядит следующим образом:
security:
...
role_hierarchy:
ROLE_CHATTER: ROLE_USER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
...
firewalls:
...
ignored:
pattern: ^/(login(_check)?|logout|resetting)$
security: false
global:
pattern: ^/admin/(.*)|^/chat/(.*)
provider: fos_userbundle
form_login:
csrf_provider: security.csrf.token_manager
login_path: fos_user_security_login
check_path: fos_user_security_check
# if true, forward the user to the login form instead of redirecting
use_forward: true
# login success redirecting options (read further below)
always_use_default_target_path: true
default_target_path: /admin
target_path_parameter: _target_path
use_referer: true
remember_me: true
logout: ~
remember_me:
secret: '%secret%'
lifetime: 604800 # 1 week in seconds
path: /
access_control:
- { path: ^/chat/, role: ROLE_CHATTER }
- { path: ^/admin/, role: ROLE_ADMIN }
Но это не работает, потому что, когда я пытаюсь войти в систему или как пользователь я закончить с этой ошибкой:
You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.
Что заставляет меня думать, что маршруты или брандмауэр Арен 't правильно настроен. Я проверил маршруты под панелью отладки, и ни один из них не соответствует, поэтому они ошибочны. Я прочитал документы here, но это совсем не полезно, и я не получаю исправления проблемы. Вы можете взять этот пост как второй части из this one, но я не хочу менять тему старого и ни содержание, потому что я думаю, что это будет полезно для будущего для кого-то другого. Итак, какие-нибудь ребята? Что бы вы отлаживали такие проблемы, связанные с маршрутами? Любое исправление для моей конкретной проблемы? Я действительно застрял здесь!
Update
Я сделал изменения, как @xabbuh предложил так теперь app/config/routing.yml
выглядит следующим образом:
platform_chat:
resource: "@PlatformChatBundle/Controller/"
type: annotation
prefix: /chat
options:
expose: true
platform_admin:
resource: "@PlatformAdminBundle/Controller/"
type: annotation
prefix: /admin
options:
expose: true
#EasyAdminBundle
easy_admin_bundle:
resource: "@PlatformAdminBundle/Controller/AdminController.php"
type: annotation
prefix: /admin
options:
expose: true
#FOSUser
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
#FOSUser Groups
fos_user_group:
resource: "@FOSUserBundle/Resources/config/routing/group.xml"
prefix: /group
#FOSJsRouting
fos_js_routing:
resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"
и `` выглядит следующим образом:
security:
...
firewalls:
...
global:
pattern:/
anonymous: true
provider: fos_userbundle
form_login:
csrf_provider: security.csrf.token_manager
login_path: fos_user_security_login
check_path: fos_user_security_check
use_forward: true # if true, forward the user to the login form instead of redirecting
always_use_default_target_path: true # login success redirecting options (read further below)
default_target_path: /admin
target_path_parameter: _target_path
use_referer: true
remember_me: true
logout: ~
remember_me:
secret: '%secret%'
lifetime: 604800 # 1 week in seconds
path: /
access_control:
- { path: ^/chat/, role: ROLE_CHATTER }
- { path: ^/admin/, role: ROLE_ADMIN }
после ясно кэш вот мои попытки и результаты:
- Войти как
ROL_CHATTER
: Я собираюсьhttp://domain.tld/app_dev.php/chat/
, как и ожидалось. Я получаю форму для входа и используя действительные учетные данные. Я получаю следующее сообщение: Доступ запрещен. Вы CHATTER. Это правильно, потому что у меня есть слушатель наsecurity.interactive_login
, и это то, что я делаю, когда пользователь регистрируется с этими кредитами. - Войти как
ROL_ADMIN
: Я собираюсьhttp://domain.tld/app_dev.php/admin/
, как и ожидалось. Я получаю форму для входа и используя действительные учетные данные. Я получаю следующее сообщение: Плохие учетные данные. Это неверно, потому что учетные данные действительны и, по крайней мере, я должен получить другое сообщение (Access Denied. Вы ADMIN), потому что слушатель наsecurity.interactive_login
, но, как я уже сказал, это не то, что происходит.
Информация, связанная с слушателем, находится на this post. Что не так?
Каков путь, связанный с маршрутом 'fos_user_security_check'? – xabbuh
@xabbuh нет совпадений с этим путем, см. [Этот рис.] (Http://content.screencast.com/users/ReynierPM/folders/Snagit/media/4a80a237-edba-4cda-94e7-5841dce3b57f/01.15.2016-15.08 .png) – ReynierPM
Даже в вашем предыдущем посте у вас было это «BadCredentialsException», поэтому я думаю, что что-то не так с вашим администратором или вы его обрабатываете. Попробуйте отладить свою проблему, проверив трассировку стека и посмотрим, на что действительно выброшено исключение. – xabbuh