src/AppBundle/Handler/LoginSuccessHandler.php line 40

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Handler;
  3. use AppBundle\Common\LoginToolkit;
  4. use Biz\Role\Util\PermissionBuilder;
  5. use Biz\User\Service\TokenService;
  6. use Biz\User\Service\UserService;
  7. use Doctrine\Bundle\DoctrineBundle\Registry as Doctrine;
  8. use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
  9. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  10. use Topxia\Service\Common\ServiceKernel;
  11. /**
  12.  * Custom login listener.
  13.  */
  14. class LoginSuccessHandler
  15. {
  16.     /**
  17.      * @var AuthorizationChecker
  18.      */
  19.     private $checker;
  20.     /**
  21.      * Constructor.
  22.      *
  23.      * @param AuthorizationChecker $checker
  24.      * @param Doctrine             $doctrine
  25.      */
  26.     public function __construct(AuthorizationChecker $checker)
  27.     {
  28.         $this->checker $checker;
  29.     }
  30.     /**
  31.      * Do the magic.
  32.      *
  33.      * @param InteractiveLoginEvent $event
  34.      */
  35.     public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
  36.     {
  37.         if ($this->checker->isGranted('IS_AUTHENTICATED_FULLY')) {
  38.             // user has just logged in
  39.         }
  40.         if ($this->checker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  41.             // user has logged in using remember_me cookie
  42.         }
  43.         // do some other magic here
  44.         $user $event->getAuthenticationToken()->getUser();
  45.         $user->setPermissions(PermissionBuilder::instance()->findPermissionsByRoles($user->getRoles()));
  46.         $request $event->getRequest();
  47.         $sessionId $request->getSession()->getId();
  48.         $request->getSession()->set('loginIp'$request->getClientIp());
  49.         $this->getUserService()->markLoginInfo();
  50.         $this->getUserService()->rememberLoginSessionId($user['id'], $sessionId);
  51.         $this->getUserService()->markLoginSuccess($user['id'], $request->getClientIp());
  52.         $this->getUserService()->updateUserLocale($user['id'], $request->getLocale());
  53.         $this->destroyAppLoginToken($user['id']);
  54.     }
  55.     protected function destroyAppLoginToken($userId)
  56.     {
  57.         if (LoginToolkit::isLimit()) {
  58.             $this->getTokenService()->deleteTokenByTypeAndUserId('mobile_login'$userId);
  59.         }
  60.     }
  61.     /**
  62.      * @return TokenService
  63.      */
  64.     protected function getTokenService()
  65.     {
  66.         return $this->createService('User:TokenService');
  67.     }
  68.     /**
  69.      * @return UserService
  70.      */
  71.     private function getUserService()
  72.     {
  73.         return $this->createService('User:UserService');
  74.     }
  75.     protected function createService($name)
  76.     {
  77.         return ServiceKernel::instance()->createService($name);
  78.     }
  79. }