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 之前捕获事件,否则您将始终通过。
希望对您有所帮助
我有一个通过 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 之前捕获事件,否则您将始终通过。
希望对您有所帮助