src/Controller/SecurityController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Form\ForgottenPasswordType;
  4. use App\Form\ResetPasswordType;
  5. use App\Repository\UserRepository;
  6. use App\Service\ForgottenPassword;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Mailer\MailerInterface;
  12. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  15. class SecurityController extends AbstractController
  16. {
  17.     #[Route(path'/login'name'login')]
  18.     public function login(
  19.         AuthenticationUtils $authenticationUtils
  20.     ): Response
  21.     {
  22.         // get the login error if there is one
  23.         $error $authenticationUtils->getLastAuthenticationError();
  24.         // last username entered by the user
  25.         $lastUsername $authenticationUtils->getLastUsername();
  26.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  27.     }
  28.     #[Route(path'/logout'name'logout')]
  29.     public function logout(): void
  30.     {
  31.     }
  32.     /**
  33.      * @
  34.      * @param Request $request
  35.      * @param UserRepository $userRepository
  36.      * @param EntityManagerInterface $em
  37.      * @param ForgottenPassword $forgottenPassword
  38.      * @param MailerInterface $mailer
  39.      * @return Response
  40.      */
  41.     #[Route(path'/forgotten-password'name'forgotten_password')]
  42.     public function forgottenPasswordEmail(Request $requestUserRepository $userRepositoryEntityManagerInterface $emForgottenPassword $forgottenPasswordMailerInterface $mailer): Response
  43.     {
  44.         $form $this->createForm(ForgottenPasswordType::class);
  45.         $form->handleRequest($request);
  46.         if ($form->isSubmitted() && $form->isValid() && $form->get('email')->getData()) {
  47.             $user $userRepository->findOneBy(['email' => $form->get('email')->getData()]);
  48.             if($user){
  49.                 $user->setResetPassword(ForgottenPassword::generateToken());
  50.                 $forgottenPassword->sendMail(
  51.                     $mailer,
  52.                     $user,
  53.                     'Mot de passe oublié',
  54.                     "emails/forgottenPassword.html.twig",
  55.                     ['user' => $user]
  56.                 );
  57.                 $em->flush();
  58.                 $this->addFlash('success''Email envoyé!');
  59.                 return $this->redirectToRoute('login');
  60.             }else{
  61.                 $this->addFlash('error''Aucun utilisateur ne possède cet email!');
  62.                 return $this->redirectToRoute('forgotten_password');
  63.             }
  64.         }
  65.         return $this->render('security/forgottenPassword.html.twig',[
  66.             'form' => $form->createView()
  67.         ]);
  68.     }
  69.     /**
  70.      * @param string $token
  71.      * @param UserRepository $userRepository
  72.      * @param UserPasswordHasherInterface $passwordHasher
  73.      * @param EntityManagerInterface $em
  74.      * @param ForgottenPassword $forgottenPassword
  75.      * @param MailerInterface $mailer
  76.      * @param Request $request
  77.      * @return Response
  78.      */
  79.     #[Route(path'/reset-password/{token}'name'reset_password'methods: ["POST""GET"])]
  80.     public function editPassword(string $tokenUserRepository $userRepositoryUserPasswordHasherInterface $passwordHasherEntityManagerInterface $emForgottenPassword $forgottenPasswordMailerInterface $mailerRequest $request): Response
  81.     {
  82.         $user $userRepository->findOneBy(['resetPassword' => $token]);
  83.         if(!$user){
  84.             $this->redirectToRoute('login');
  85.         }
  86.         $form $this->createForm(ResetPasswordType::class);
  87.         $form->handleRequest($request);
  88.         if ($form->isSubmitted() && $form->isValid()) {
  89.             $user->setResetPassword(null);
  90.             $forgottenPassword->sendMail(
  91.                 $mailer,
  92.                 $user,
  93.                 'Réinitialisation du mot de passe',
  94.                 "emails/resetPassword.html.twig",
  95.                 ['user' => $user,]
  96.             );
  97.             $hashedPassword $passwordHasher->hashPassword(
  98.                 $user,
  99.                 $form->get('password')->getData()
  100.             );
  101.             $user->setPassword($hashedPassword);
  102.             $em->flush();
  103.             $this->addFlash('success''Email envoyé!');
  104.             return $this->redirectToRoute('login');
  105.         }
  106.         return $this->render('security/resetPassword.html.twig',[
  107.             'form' => $form->createView()
  108.         ]);
  109.     }
  110. }