2017-11-15 2 views
0

FOSUserBundle을 통한 사용자 관리가 가능한 Symfony 3 응용 프로그램이 있습니다. 사용자의 "last_login"값을 확인하여 초기 사용자 로그인을 확인하는 Listener 클래스를 구현하려고합니다. article on event subscribers을 읽는 동안 나는 정확하게 last_login 값이 언제 업데이트되는지 알아 내려고 노력합니다. 그런 지식을 가진 사람이 있습니까? 아니면 누구나 사용자의 초기 로그인과 관련하여 더 나은 방법을 알고 있습니까?FOSUserBundle - 초기 로그인시 기능 수행

답변

1

방금 ​​살펴 봤는데 eventSubscriber를 사용하여 SecurityEvents :: INTERACTIVE_LOGIN 이벤트에 가입하면 필요한 위치로 이동할 수 있습니다.

class RegistrationSubscriber implements EventSubscriberInterface 
{ 
private $tokenStorage; 

public function __construct(TokenStorage $tokenStorage) 
{ 
    $this->tokenStorage = $tokenStorage; 
} 
public static function getSubscribedEvents() 
{ 
    return [ 
     SecurityEvents::INTERACTIVE_LOGIN => [ 
      ['lastLogin', 150], 
     ], 
    ]; 
} 
public function lastLogin(InteractiveLoginEvent $event){ 
    $user = $this->tokenStorage->getToken()->getUser(); 
    if($user->getLastLogin() == null){ 
    //Do something 
    } 
} 

첫 번째 로그인 $ user-> getLastLogin()에 대한 테스트에서 여기에 필요한 로직을 넣을 수 있습니다.

+0

정확히 150은 무엇입니까? –

+0

매력처럼 작동하지만, 고마워요! :) –

+1

150가 내가 임의로 선택한 우선 순위입니다. –

1

Symfony와 FOSUserBundle에는 이에 대한 이벤트가 있습니다. 심지어 FOSUserBundle는 해당 이벤트

/** 
    * @return array 
    */ 
    public static function getSubscribedEvents() 
    { 
     return array(
      FOSUserEvents::SECURITY_IMPLICIT_LOGIN => 'onImplicitLogin', 
      SecurityEvents::INTERACTIVE_LOGIN => 'onSecurityInteractiveLogin', 
     ); 
    } 

당신이 그 이벤트를 구독하고 자신의 논리를 만들 수에 대한 이벤트 가입자가 있습니다. symfony에서 초기 로그인과 같은 티브이가 없으므로 스스로 관리해야합니다.

는 이벤트를 구독하고이 같은 시도 :

public function onSecurityInteractiveLogin(InteractiveLoginEvent $event){ 

    $user = $event->getAuthenticationToken()->getUser(); 
    //some logic to check the user 
    if(!$user->getLastLogin()){ 
    //its my first login!!! do what ever you want here 
    }else{ 
     //I have already logged before so just pass 
    } 
} 

은 또한 당신이 FOSUserBundle 전에 이벤트를 잡으려고 그런 -10 일에 가입자 우선 순위를 변경해야 또는 당신은 항상 전달됩니다.

희망 하시겠습니까?

관련 문제