src\Security\LoginFormAuthenticator.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use http\Message;
  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\Encoder\UserPasswordEncoderInterface;
  12. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  13. use Symfony\Component\Security\Core\Exception\CustomUserMessageAccountStatusException;
  14. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
  15. use Symfony\Component\Security\Core\Security;
  16. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  17. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  18. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  19. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  20. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\PasswordUpgradeBadge;
  21. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  22. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  23. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  24. use Symfony\Component\Security\Http\Authenticator\Passport\PassportInterface;
  25. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  26. class LoginFormAuthenticator extends AbstractLoginFormAuthenticator implements PasswordAuthenticatedUserInterface{
  27.     use TargetPathTrait;
  28.     public const LOGIN_ROUTE 'app_login';
  29.     private UrlGeneratorInterface $urlGenerator;
  30.     private EntityManagerInterface  $entityManager;
  31.     private CsrfTokenManagerInterface $csrfTokenManager;
  32.     private UserPasswordEncoderInterface   $passwordEncoder;
  33.     private Security $security;
  34.     public function __construct(UrlGeneratorInterface $urlGeneratorEntityManagerInterface $entityManagerCsrfTokenManagerInterface $csrfTokenManagerUserPasswordEncoderInterface $userPasswordEncoderSecurity $security)
  35.     {
  36.         $this->urlGenerator $urlGenerator;
  37.         $this->entityManager $entityManager;
  38.         $this->csrfTokenManager $csrfTokenManager;
  39.         $this->passwordEncoder $userPasswordEncoder;
  40.         $this->security $security;
  41.     }
  42.     public function supports(Request $request): bool
  43.     {
  44.         return self::LOGIN_ROUTE === $request->attributes->get('_route') && $request->isMethod('POST');
  45.     }
  46.     
  47.     public function authenticate(Request $request): PassportInterface
  48.     {
  49.         $phone $request->request->get('phone''');
  50.         $request->getSession()->set(Security::LAST_USERNAME$phone);
  51.         $user $this->entityManager->getRepository(User::class)->findOneBy([
  52.             'phone' => $phone
  53.         ]);
  54.         if (!$user){
  55.             throw new CustomUserMessageAccountStatusException("Wrong username or password");
  56.         }
  57.         if(!$user->getIsACtive()){
  58.             throw new CustomUserMessageAccountStatusException("deactivated user! contact admin");
  59.         }
  60.         if(!in_array('ROLE_WEB'$user->getRoles())){
  61.             throw new CustomUserMessageAccountStatusException("you can not access this data");
  62.         }
  63.         if(in_array('ROLE_WEB_BRANCH'$user->getRoles())){
  64.             $branch $user->getBranch();
  65.             $request->getSession()->set('branch'$branch->getId());
  66.         }
  67. //        dd($user);
  68.         return new Passport(
  69.             new UserBadge($user),
  70.             new PasswordCredentials($request->request->get('password''')),
  71.             [
  72.                 new CsrfTokenBadge('authenticate'$request->get('_csrf_token')),
  73.             ]
  74.         );
  75.     }
  76.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $firewallName): ?Response
  77.     {
  78.         /** @var User $user */
  79.         $user $token->getUser();
  80.         $request->getSession()->set('branch_name''NEEMA OPTICIANS '.$user->getBranch()->getBranchName());
  81.         // For example:
  82. //        return new RedirectResponse($this->urlGenerator->generate('some_route'));
  83. //        throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
  84. //        if(in_array('ROLE_WEB', $token->getUser()->getRoles(), true)){
  85. //
  86. //            return new RedirectResponse($this->urlGenerator->generate('homeRoute'));
  87. //        }
  88.         return new RedirectResponse($this->urlGenerator->generate('homeRoute'));
  89.     }
  90.     protected function getLoginUrl(Request $request): string
  91.     {
  92.         return $this->urlGenerator->generate(self::LOGIN_ROUTE);
  93.     }
  94.     public function getPassword(): ?string
  95.     {
  96.         // TODO: Implement getPassword() method.
  97.         return '';
  98.     }
  99. }