← Back
Editing: UserPasswordSubscriber.php
<?php namespace App\EventSubscriber; use App\Event\AbstractUserEvent; use App\Event\UserBeforeCreateEvent; use App\Event\UserBeforeUpdateEvent; use App\Service\UserService; use Psr\Log\LoggerInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; class UserPasswordSubscriber implements EventSubscriberInterface { public function __construct( private readonly UserPasswordHasherInterface $passwordHasher, private readonly UserService $userService, private readonly LoggerInterface $logger ) { } public static function getSubscribedEvents(): array { return [ UserBeforeCreateEvent::NAME => [['setPassword'], ['fillRelatedFields']], UserBeforeUpdateEvent::NAME => [['setPassword'], ['fillRelatedFields']], ]; } public function fillRelatedFields(AbstractUserEvent $event): void { $user = $event->getUser(); $user->setUsername($user->getEmail()); $user->setUsernameCanonical($user->getEmail()); $user->setEmailCanonical($user->getEmail()); } public function setPassword(AbstractUserEvent $event): void { $user = $event->getUser(); $user->setUpdatedAt(new \DateTime()); if ($user->getPlainPassword()) { $user->setPassword($this->passwordHasher->hashPassword($user, $user->getPlainPassword())); $this->logger->info('Changing password for user', ['user' => $user->getEmail()]); return; } if ($event instanceof UserBeforeCreateEvent) { $rawPassword = $this->userService->randomPassword(); $user->setPlainPassword($rawPassword); $user->setPassword($this->passwordHasher->hashPassword($user, $rawPassword)); $this->logger->info('Setting random password for user', ['user' => $user->getEmail()]); } } }
Save File
Cancel