src/FlexApp/EventSubscriber/LogoutSubscriber.php line 22

Open in your IDE?
  1. <?php
  2. namespace FlexApp\EventSubscriber;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use FlexApp\Repository\RefreshTokenRepository;
  5. use FlexApp\Service\CurrentUserProvider;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Cookie;
  8. use Symfony\Component\Security\Http\Event\LogoutEvent;
  9. use WebBundle\Helper\ServerHelper;
  10. class LogoutSubscriber implements EventSubscriberInterface
  11. {
  12.     /** @required */
  13.     public CurrentUserProvider $currentUserProvider;
  14.     /** @required */
  15.     public EntityManagerInterface $entityManager;
  16.     /** @required */
  17.     public RefreshTokenRepository $refreshTokenRepository;
  18.     public function onLogoutEvent(LogoutEvent $event)
  19.     {
  20.         $response $event->getResponse();
  21.         $token hash('sha256'uniqid());
  22.         $cookie = new Cookie('token'$tokentime() + 94608000'/');
  23.         $_SESSION['token'] = $token;
  24.         $response->headers->setCookie($cookie);
  25.         $this->logoutOnNewSite();
  26.     }
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             LogoutEvent::class => 'onLogoutEvent',
  31.         ];
  32.     }
  33.     private function logoutOnNewSite()
  34.     {
  35.         $user $this->currentUserProvider->getUser();
  36.         if (!$user) {
  37.             return;
  38.         }
  39.         $user->setSecurityField(md5(uniqid()));
  40.         $refreshTokens $this->refreshTokenRepository->findBy(['username' => $user->getEmail()]);
  41.         foreach ($refreshTokens as $refreshToken) {
  42.             $this->entityManager->remove($refreshToken);
  43.         }
  44.         $this->entityManager->flush();
  45.     }
  46. }