src/EventSubscriber/SecuritySubscriber.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use App\Events;
  5. use App\Mailer\UserMailer;
  6. use Doctrine\Common\Persistence\ObjectManager;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\EventDispatcher\GenericEvent;
  10. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  11. class SecuritySubscriber implements EventSubscriberInterface
  12. {
  13.     protected $objectManager;
  14.     protected $tokenGenerator;
  15.     protected $userMailer;
  16.     public function __construct(
  17.         ObjectManager $objectManager,
  18.         TokenGeneratorInterface $tokenGenerator,
  19.         UserMailer $userMailer
  20.     ) {
  21.         $this->objectManager $objectManager;
  22.         $this->tokenGenerator $tokenGenerator;
  23.         $this->userMailer $userMailer;
  24.     }
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             Events::PASSWORD_RESET => 'onPasswordReset'
  29.         ];
  30.     }
  31.     public function onPasswordReset(GenericEvent $event): void
  32.     {
  33.         /** @var User $user */
  34.         $user $event->getSubject();
  35.         $this->sendPasswordResetMessage($user);
  36.     }
  37.     /**
  38.      * Sends password reset message to the User's email address.
  39.      *
  40.      * @param User $user
  41.      *
  42.      * @return User
  43.      */
  44.     private function sendPasswordResetMessage(User $user)
  45.     {
  46.         //Just to get rid of throwing null token value validation error when generating the reset password link.
  47.         if (!$user->getConfirmationToken()) {
  48.             $this->generateRegistrationConfirmationToken($user);
  49.         }
  50.         $this->userMailer->sendResettingEmailMessage($user);
  51.         return $user;
  52.     }
  53.     /**
  54.      * Generates a new registration confirmation token for the given User and persists the entity.
  55.      *
  56.      * @param User $user
  57.      *
  58.      * @return User
  59.      */
  60.     private function generateRegistrationConfirmationToken($user)
  61.     {
  62.         $token $this->tokenGenerator->generateToken();
  63.         $user->setConfirmationToken($token);
  64.         $this->objectManager->persist($user);
  65.         $this->objectManager->flush();
  66.         return $user;
  67.     }
  68. }