2012-06-24 2 views
23

사용자가 성공적으로 로그인 한 후에 작업 집합을 수행해야합니다. 데이터베이스에서 데이터를로드하고 세션에 저장하는 작업이 포함됩니다.Symfony2 : 성공적인 로그인 이벤트 후 작업 집합 수행

이것을 구현하는 가장 좋은 방법은 무엇입니까?

+1

서비스를 사용하여 작업을 수행하는 방법 : http://stackoverflow.com/questions/8308050/how-to-disable-redirection-after-login-check-in-symfony-2/8312188#8312188 – unairoldan

답변

50

security.interactive_login 이벤트에 리스너를 추가 할 수 있습니다.

이렇게 수신기를 연결하십시오. 이 예제에서는 보안 컨텍스트와 세션을 종속성으로 전달합니다.

참고 : SecurityContext에 심포니 2.6으로 사용되지 않습니다. http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

parameters: 
    # ... 

    account.security_listener.class: Company\AccountBundle\Listener\SecurityListener 

services: 
    # ... 

    account.security_listener: 
     class: %account.security_listener.class% 
     arguments: ['@security.context', '@session'] 
     tags: 
      - { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin } 

를 참조 리스너에 당신은 당신이 세션에 원하는대로 저장할 수 있습니다하십시오. 이 경우 사용자 시간대를 설정합니다.

+0

이것은 트릭을하는 것처럼 보입니다. 수업에서 선언해야 할 의존성이 있습니까? – jbsound

+0

아니, 당신 만의 의존성 (아마 엔티티 관리자). – MDrollette

+0

조금 더 파기 한 후에 종속성이 지정되어야하는 것처럼 보입니다. 더 완벽한 코드 구현을 보여주는이 기사를 찾았습니다. http://www.metod.si/login-event-listener-in-symfony2/ – jbsound

6

이벤트 자체에서 사용자 인스턴스를 가져올 수도 있습니다. 토큰 저장소를 삽입 할 필요가 없습니다.

public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) 
{ 
    $event->getAuthenticationToken()->getUser() 
} 
관련 문제