src/Security/LoginAuthentificationAuthenticator.php line 23

  1. <?php
  2. namespace App\Security;
  3. use Symfony\Component\HttpFoundation\RedirectResponse;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. use Symfony\Component\Security\Core\Security;
  10. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  11. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  12. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  13. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  14. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  15. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  16. use Symfony\Component\Security\Core\Exception\DisabledException;
  17. use App\Entity\User;
  18. class LoginAuthentificationAuthenticator extends AbstractLoginFormAuthenticator
  19. {
  20.     use TargetPathTrait;
  21.     public const LOGIN_ROUTE 'app_login';
  22.     private UrlGeneratorInterface $urlGenerator;
  23.     private ManagerRegistry $doctrine;
  24.     public function __construct(UrlGeneratorInterface $urlGeneratorManagerRegistry $doctrine)
  25.     {
  26.         $this->urlGenerator $urlGenerator;
  27.         $this->doctrine $doctrine;
  28.     }
  29. public function authenticate(Request $request): Passport
  30. {
  31.     if ($request->request->has('g-recaptcha-response')) {
  32.         if ($request->request->get('g-recaptcha-response') != '') {
  33.             $username $request->request->get('_username''');
  34.             $request->getSession()->set(Security::LAST_USERNAME$username);
  35.             // Récupérer l'utilisateur basé sur le nom d'utilisateur
  36.             $user $this->doctrine->getRepository(User::class)->findOneBy(['email'=>$username]);
  37.            // dump($user);die;
  38.            if($user){
  39.             if ($user->getEtat() === ) {
  40.                 // Si le compte est désactivé, lancez une exception DisabledException
  41.                 throw new DisabledException('Votre compte a été désactivé. Veuillez contacter l\'administrateur.');
  42.             }
  43.         }
  44.             return new Passport(
  45.                 new UserBadge($username),
  46.                 new PasswordCredentials($request->request->get('_password''')),
  47.                 [
  48.                     new CsrfTokenBadge('authenticate'$request->request->get('_csrf_token')),
  49.                 ]
  50.             );
  51.         }
  52.     }
  53.     return new Passport(
  54.         new UserBadge(''),
  55.         new PasswordCredentials(''),
  56.         [
  57.             new CsrfTokenBadge('authenticate'$request->request->get('_csrf_token')),
  58.         ]
  59.     );
  60. }
  61.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $firewallName): ?Response
  62.     {
  63.         if ($targetPath $this->getTargetPath($request->getSession(), $firewallName)) {
  64.             return new RedirectResponse($targetPath);
  65.         }
  66.         /*if ($request->getSession()->has('target_path')) {
  67.             return new RedirectResponse($this->urlGenerator->generate('account_disabled'));
  68.         }*/
  69.         $user $token->getUser();
  70.         $role=$user->getRoles()[0];
  71.         if($role === "ROLE_ADMIN"){
  72.            return new RedirectResponse($this->urlGenerator->generate('app_admin'));
  73.        }else if($role === "ROLE_DIRECTEUR"){
  74.            return new RedirectResponse($this->urlGenerator->generate('app_directeur'));
  75.         
  76.         }else if($role === "ROLE_RESPONSABLE"){
  77.         return new RedirectResponse($this->urlGenerator->generate('app_responsable'));
  78.         }else if ($role === "ROLE_CHERCHEUR"){
  79.             return new RedirectResponse($this->urlGenerator->generate('app_chercheur'));
  80.         }
  81.     }
  82.     protected function getLoginUrl(Request $request): string
  83.     {
  84.         return $this->urlGenerator->generate(self::LOGIN_ROUTE);
  85.     }
  86. }