src/Security/Authenticator/EmployeeAuthenticator.php line 20

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security\Authenticator;
  4. use App\Form\Login\Model\EmployeeLoginModel;
  5. use App\Form\Login\Type\EmployeeLoginType;
  6. use Symfony\Component\Form\FormFactoryInterface;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\RouterInterface;
  11. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  12. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  13. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  14. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  15. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  16. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  17. class EmployeeAuthenticator extends AbstractLoginFormAuthenticator
  18. {
  19.     use TargetPathTrait;
  20.     public function __construct(
  21.         private RouterInterface $router,
  22.         private FormFactoryInterface $formFactory,
  23.     ) {}
  24.     protected function getLoginUrl(Request $request): string
  25.     {
  26.         return $this->router->generate('management_login');
  27.     }
  28.     public function authenticate(Request $request): Passport
  29.     {
  30.         $form $this->formFactory->create(EmployeeLoginType::class);
  31.         $form->handleRequest($request);
  32.         /** @var EmployeeLoginModel $model */
  33.         $model $form->getData();
  34.         $username $model->getUsername();
  35.         $password $model->getPassword();
  36.         return new Passport(
  37.             new UserBadge($username),
  38.             new PasswordCredentials($password),
  39.         );
  40.     }
  41.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $firewallName): ?Response
  42.     {
  43.         $targetUrl $this->getTargetPath($request->getSession(), 'management');
  44.         if ($targetUrl) {
  45.             return new RedirectResponse($targetUrl);
  46.         }
  47.         return new RedirectResponse($this->router->generate('management_office_list'));
  48.     }
  49. }