src/Security/AppAuthenticator.php line 62

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\User;
  4. use App\Repository\LeadRepository;
  5. use App\Repository\UserRepository;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  10. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  11. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  12. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
  13. use Symfony\Component\Security\Core\Security;
  14. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  15. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  16. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  17. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\CustomCredentials;
  18. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  19. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  20. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  21. use Symfony\Component\HttpFoundation\Cookie;
  22. class AppAuthenticator extends AbstractLoginFormAuthenticator
  23. {
  24.     use TargetPathTrait;
  25.     public const LOGIN_ROUTE 'app.login';
  26.     private UrlGeneratorInterface $urlGenerator;
  27.     public $userRepository;
  28.     public $leadRepository;
  29.     public function __construct(UrlGeneratorInterface $urlGeneratorUserRepository $userRepositoryLeadRepository $leadRepository)
  30.     {
  31.         $this->urlGenerator $urlGenerator;
  32.         $this->userRepository $userRepository;
  33.         $this->leadRepository $leadRepository;
  34.     }
  35.     public function supports(Request $request): bool
  36.     {
  37.         return $request->getPathInfo() === '/login' && $request->isMethod('POST');
  38.     }
  39.     
  40.     public function authenticate(Request $request): Passport
  41.     {
  42.         $email $request->request->get('email');
  43.         $password $request->request->get('password');
  44.         
  45.         $request->getSession()->set(Security::LAST_USERNAME$email);
  46.         
  47.         return new Passport(
  48.             new UserBadge($email, function ($userIdentifier) {
  49.                 $user $this->userRepository->findOneBy(['email' => $userIdentifier]);
  50.                 if (!$user) {
  51.                     throw new UserNotFoundException();
  52.                 }
  53.                 return $user;
  54.             }),
  55.             new PasswordCredentials($password),
  56.             [
  57.                 new CsrfTokenBadge('authenticate'$request->request->get('_csrf_token')),
  58.                 ]
  59.             );
  60.     }
  61.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $firewallName): ?Response
  62.     {
  63.         /**
  64.          * Connexion rĂ©ussis, verification des cookies.
  65.          */
  66.         $request->getSession()->set('userPossess'$token->getUser());
  67.         if($token->getUser()->getObjectifs()[0] == null){
  68.             return new RedirectResponse(
  69.                 $this->urlGenerator->generate('objectif.index')
  70.             );
  71.         }
  72.         return new RedirectResponse(
  73.             $this->urlGenerator->generate('lead.index')
  74.         );
  75.     }
  76.     protected function getLoginUrl(Request $request): string
  77.     {
  78.         return $this->urlGenerator->generate(self::LOGIN_ROUTE);
  79.     }
  80. }