Я реализовывал систему входа в систему в symfony2, которая включает конфигурацию security.xml и некоторые пользовательские компоненты …
При успешном входе в систему symfony отправляет пользователя на определенный контроллер, где я написал несколько кодов, чтобы заполнить некоторые дополнительные данные для сессии. Это работало нормально, пока мы запустили приложение со страницы входа в систему.
Но в некоторых случаях, когда мы обращаемся к какой-либо странице, требующей аутентификации, symfony заставляет нас зайти на страницу входа. после успешного входа в систему он берет нас непосредственно на эту страницу (откуда мы пришли) вместо целевой страницы. В этом случае дополнительный код, который мы написали на целевой странице, не выполняется, следовательно, приложение не ведет себя так, как ожидается.
Мой вопрос заключается в том, чтобы преодолеть это … есть ли в symfony2 какая-либо зацепка / настройка / функция, с помощью которой я могу выполнить набор кода при всех успешных входах в систему, независимо от того, на какую страницу пользователя перенаправляется.
Вы можете реализовать Успех Hander.
Напишите класс, который реализует AuthenticationSuccessHandlerInterface
:
Определите его как службу (вы можете добавить другие службы, такие как doctine или контекст безопасности, в вашем случае Session)
Добавьте службу обработчика в конфигурацию безопасности, например:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: login
check_path: login_check
success_handler: some.service.id
logout:
path: logout
target: /
Проверьте этот для полного примера и тому ссылка doc для всех параметров конфигурации безопасности symfony2 (вы также можете настроить обработчик fail_handler).
Надеюсь это поможет
Привет, Джозеф, я сейчас работаю в проекте symfony 1.4, возможно, тебе следует использовать следующий код, чтобы проверить, аутентифицирован ли пользователь, а затем запустить твой код в этом блоке.
if ($user->isAuthenticated()) {
#Run your code in this block and then redirect the user.
$this->redirect('@your_page');
}