Как ввести конкретные значения для сессии на symfony2 при входе в систему?

Я реализовывал систему входа в систему в symfony2, которая включает конфигурацию security.xml и некоторые пользовательские компоненты …

При успешном входе в систему symfony отправляет пользователя на определенный контроллер, где я написал несколько кодов, чтобы заполнить некоторые дополнительные данные для сессии. Это работало нормально, пока мы запустили приложение со страницы входа в систему.

Но в некоторых случаях, когда мы обращаемся к какой-либо странице, требующей аутентификации, symfony заставляет нас зайти на страницу входа. после успешного входа в систему он берет нас непосредственно на эту страницу (откуда мы пришли) вместо целевой страницы. В этом случае дополнительный код, который мы написали на целевой странице, не выполняется, следовательно, приложение не ведет себя так, как ожидается.

Мой вопрос заключается в том, чтобы преодолеть это … есть ли в symfony2 какая-либо зацепка / настройка / функция, с помощью которой я могу выполнить набор кода при всех успешных входах в систему, независимо от того, на какую страницу пользователя перенаправляется.

3

Решение

Вы можете реализовать Успех Hander.

  1. Напишите класс, который реализует AuthenticationSuccessHandlerInterface:

  2. Определите его как службу (вы можете добавить другие службы, такие как doctine или контекст безопасности, в вашем случае Session)

  3. Добавьте службу обработчика в конфигурацию безопасности, например:

    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).

Надеюсь это поможет

1

Другие решения

Привет, Джозеф, я сейчас работаю в проекте symfony 1.4, возможно, тебе следует использовать следующий код, чтобы проверить, аутентифицирован ли пользователь, а затем запустить твой код в этом блоке.

if ($user->isAuthenticated()) {
#Run your code in this block and then redirect the user.
$this->redirect('@your_page');
}
1

По вопросам рекламы [email protected]