2017-11-15 5 views
0

Ich habe eine Symfony 3-Anwendung mit Benutzerverwaltung über FOSUserBundle. Ich möchte eine Listener-Klasse implementieren, die nach einer ersten Benutzeranmeldung sucht, indem sie den "last_login" -Wert des Benutzers überprüft. Während ich die article on event subscribers gelesen habe, habe ich Mühe herauszufinden, wann genau der last_login Wert aktualisiert wird. Gibt es jemanden mit diesem Wissen oder weiß jemand einen besseren Ansatz bezüglich der ersten Anmeldung eines Benutzers?FOSUserBundle - Funktion bei der ersten Anmeldung ausführen

Antwort

1

Ich habe mir das gerade angesehen und es scheint, dass Sie einen eventSubscriber verwenden können, um das SecurityEvents :: INTERACTIVE_LOGIN-Ereignis zu abonnieren, um dorthin zu gelangen, wo Sie sein müssen.

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 
    } 
} 

In meinen Tests auf dem ersten Login $ user-> getLastLogin() ist null, so dass Sie jede Logik, die Sie hier benötigen setzen.

+0

Für was genau ist die 150? –

+0

Funktioniert aber wie ein Charme, danke! :) –

+1

die 150 ist die priorität, die ich zufällig gewählt habe –

1

Symfony und FOSUserBundle haben Ereignisse dafür. Auch FOSUserBundle hat ein Event Teilnehmer für diese Ereignisse

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

Sie für diese Ereignisse abonnieren können und Ihre eigene Logik machen. Es gibt keine solche Thibg als initiale Anmeldung in Symfony, die Sie selbst verwalten müssen.

auf die Ereignisse abonnieren und so etwas wie dies versuchen:

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 
    } 
} 

Sie auch benötigen, um Ihre Teilnehmer Priorität auf -10 oder so etwas zu ändern, um die Veranstaltung vor FOSUserBundle zu fangen, oder Sie werden immer vorbei.

Hoffe es hilft

Verwandte Themen