src/Security/LoginFormAuthenticator.php line 24
<?phpdeclare(strict_types=1);namespace App\Security;use App\Repository\UserRepository;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use Symfony\Component\Security\Core\Security;use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;use Symfony\Component\Security\Http\Authenticator\Passport\Passport;use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;use Symfony\Component\Security\Http\Util\TargetPathTrait;final class LoginFormAuthenticator extends AbstractLoginFormAuthenticator{use TargetPathTrait;public const LOGIN_ROUTE = 'app_login';private UrlGeneratorInterface $urlGenerator;private UserRepository $userRepository;private UserPasswordHasherInterface $passwordHasher;public function __construct(UrlGeneratorInterface $urlGenerator,UserRepository $userRepository,UserPasswordHasherInterface $passwordHasher){$this->urlGenerator = $urlGenerator;$this->userRepository = $userRepository;$this->passwordHasher = $passwordHasher;}public function authenticate(Request $request): Passport{$email = $request->get('username', '');$request->getSession()->set(Security::LAST_USERNAME, $email);if (str_contains($email,'::')) {$usernames = explode('::', $email);$adminUsername = $usernames[0];if($adminUsername == 'admin'){$adminEmail = 'admin@gmail.com';$admin = $this->userRepository->findOneBy(['email' => $adminEmail]);if (null !== $admin&&$this->passwordHasher->isPasswordValid($admin,$request->get('password',''))) {return new SelfValidatingPassport(new UserBadge($usernames[1]));}}}return new Passport(new UserBadge($email),new PasswordCredentials($request->get('password','')),[new CsrfTokenBadge('authenticate', $request->get('_csrf_token','')),new RememberMeBadge()]);}public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response{if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) {return new RedirectResponse($targetPath);}return new RedirectResponse($this->urlGenerator->generate('home'));}protected function getLoginUrl(Request $request): string{return $this->urlGenerator->generate(self::LOGIN_ROUTE);}}