src/Security/LoginAuthenticator.php line 22
<?phpnamespace App\Security;use App\Entity\User;use App\Enum\EmployeeStatus;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\Security\Http\Util\TargetPathTrait;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Security\Http\SecurityRequestAttributes;use Symfony\Component\Security\Http\Authenticator\Passport\Passport;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;class LoginAuthenticator extends AbstractLoginFormAuthenticator{use TargetPathTrait;public const LOGIN_ROUTE = 'login';public function __construct(private UrlGeneratorInterface $urlGenerator,private EntityManagerInterface $entityManager) {}public function authenticate(Request $request): Passport{$email = $request->request->get('email', '');$request->getSession()->set(SecurityRequestAttributes::LAST_USERNAME, $email);return new Passport(new UserBadge($email),new PasswordCredentials($request->request->get('password', '')),[new CsrfTokenBadge('authenticate', $request->request->get('_csrf_token')),new RememberMeBadge(),]);}public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response{/** @var User $user */$user = $token->getUser();// Check if leave of absence has ended and reset status to ACTIVEif ($user->getEmployeeStatus() === EmployeeStatus::LEAVE_OF_ABSENCE) {$endDate = $user->getLeaveOfAbsenceEndDate();if ($endDate !== null && $endDate < new \DateTime('today')) {$user->setEmployeeStatus(EmployeeStatus::ACTIVE);$user->setLeaveOfAbsenceStartDate(null);$user->setLeaveOfAbsenceEndDate(null);$this->entityManager->persist($user);$this->entityManager->flush();}}if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) {return new RedirectResponse($targetPath);}// For example:return new RedirectResponse($this->urlGenerator->generate('dashboard.my_incentives'));}protected function getLoginUrl(Request $request): string{return $this->urlGenerator->generate(self::LOGIN_ROUTE);}}