src/Security/AppCustomAuthenticator.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\User;
  4. use Symfony\Component\HttpFoundation\RedirectResponse;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  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 Doctrine\Persistence\ManagerRegistry;
  17. class AppCustomAuthenticator extends AbstractLoginFormAuthenticator
  18. {
  19. use TargetPathTrait;
  20. public const LOGIN_ROUTE = 'app_login';
  21. private $entityManager;
  22. private $urlGenerator;
  23. private $csrfTokenManager;
  24. private $passwordEncoder;
  25. private $mail;
  26. public function __construct(UrlGeneratorInterface $urlGenerator)
  27. {
  28. $this->urlGenerator = $urlGenerator;
  29. }
  30. public function supports(Request $request): bool
  31. {
  32. return self::LOGIN_ROUTE === $request->attributes->get('_route')
  33. && $request->isMethod('POST');
  34. }
  35. public function authenticate(Request $request): Passport
  36. {
  37. $email = $request->request->get('email', '');
  38. $request->getSession()->set(Security::LAST_USERNAME, $email);
  39. return new Passport(
  40. new UserBadge($email),
  41. new PasswordCredentials($request->request->get('password', '')),
  42. [
  43. new CsrfTokenBadge('authenticate', $request->request->get('_csrf_token')),
  44. ]
  45. );
  46. }
  47. public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
  48. {
  49. // if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
  50. // return new RedirectResponse($targetPath);
  51. // }
  52. $user = $token->getUser();
  53. if (in_array('ROLE_ADMIN', $user->getRoles())){
  54. return new RedirectResponse($this->urlGenerator->generate('app_admin'));
  55. }elseif (in_array('ROLE_ADMIN_INTFEDERAL', $user->getRoles())){
  56. return new RedirectResponse($this->urlGenerator->generate('province_admin'));
  57. }elseif (in_array('ROLE_ADMIN_FEDERAL', $user->getRoles())){
  58. return new RedirectResponse($this->urlGenerator->generate('federation_admin'));
  59. }elseif (in_array('ROLE_DEMANDE', $user->getRoles())){
  60. return new RedirectResponse($this->urlGenerator->generate('demande_user'));
  61. }else{
  62. return new RedirectResponse($this->urlGenerator->generate('usermembre_profil'));
  63. }
  64. return new RedirectResponse($this->urlGenerator->generate('app_admin'));
  65. throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
  66. }
  67. protected function getLoginUrl(Request $request): string
  68. {
  69. return $this->urlGenerator->generate(self::LOGIN_ROUTE);
  70. }
  71. }