src/Security/LoginFormAuthenticator.php line 34

Open in your IDE?
  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 Symfony\Component\Routing\RouterInterface;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  9. use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator;
  10. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  11. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  12. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  13. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  14. use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
  15. use Symfony\Component\Security\Core\Security;
  16. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  17. class LoginFormAuthenticator extends AbstractAuthenticator implements AuthenticationEntryPointInterface
  18. {
  19. use TargetPathTrait;
  20. public function __construct(private readonly RouterInterface $router)
  21. {
  22. }
  23. public function supports(Request $request): ?bool
  24. {
  25. return 'security_login' === $request->attributes->get('_route')
  26. && $request->isMethod('POST');
  27. }
  28. public function start(Request $request, AuthenticationException $authException = null): Response
  29. {
  30. return new RedirectResponse(
  31. $this->router->generate('security_login')
  32. );
  33. }
  34. public function authenticate(Request $request): Passport
  35. {
  36. $username = $request->request->get('username');
  37. $password = $request->request->get('password');
  38. return new Passport(
  39. new UserBadge($username),
  40. new PasswordCredentials($password),
  41. [
  42. new CsrfTokenBadge(
  43. 'authenticate',
  44. $request->request->get('_csrf_token')
  45. ),
  46. // new RememberMeBadge(),
  47. ]
  48. );
  49. }
  50. public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
  51. {
  52. return new RedirectResponse($this->getTargetPath($request->getSession(),
  53. $firewallName) ?? $this->router->generate('default_homepage'));
  54. }
  55. public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response
  56. {
  57. $request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception);
  58. return new RedirectResponse(
  59. $this->router->generate('security_login')
  60. );
  61. }
  62. }