FOSUserBundle - 在初始登录时执行功能

FOSUserBundle - perform function upon initial login

我有一个通过 FOSUserBundle 进行用户管理的 Symfony 3 应用程序。我想实现一个侦听器 class,它通过检查用户的 "last_login" 值来检查初始用户登录。虽然我确实阅读了 article on event subscribers,但我很难确定 last_login 值的确切更新时间。 有没有人知道这样的知识,或者有没有人知道关于用户初始登录的更好方法?

我刚刚看过这个,您似乎可以使用 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() 为空,因此您可以在此处放置您需要的任何逻辑。

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

此外,您还需要将订阅者优先级更改为 -10 或类似的设置,以便在 FOSUserBundle 之前捕获事件,否则您将始终通过。

希望对您有所帮助