src/Controller/SecurityController.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Form\ResetPasswordFormType;
  4. use App\Form\ResetPasswordRequestFormType;
  5. use App\Repository\UsersRepository;
  6. use App\Service\SendMailService;
  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\PasswordHasher\Hasher\UserPasswordHasherInterface;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  15. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  16. class SecurityController extends AbstractController
  17. {
  18.     #[Route(path'/connexion'name'app_login')]
  19.     public function login(AuthenticationUtils $authenticationUtils): Response
  20.     {
  21.         // if ($this->getUser()) {
  22.         //     return $this->redirectToRoute('target_path');
  23.         // }
  24.         // get the login error if there is one
  25.         $error $authenticationUtils->getLastAuthenticationError();
  26.         // last username entered by the user
  27.         $lastUsername $authenticationUtils->getLastUsername();
  28.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  29.     }
  30.     #[Route(path'/deconnexion'name'app_logout')]
  31.     public function logout(): void
  32.     {
  33.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  34.     }
  35.     #[Route(path'/reinitialisation-password'name'forgetten_password')]
  36.     public function forgetten_password(Request $request,
  37.     UsersRepository $usersRepository,
  38.     TokenGeneratorInterface $tokenGenerator,
  39.     SendMailService $mail,
  40.     EntityManagerInterface $em,
  41.     \MercurySeries\FlashyBundle\FlashyNotifier $flashy): Response
  42.     {
  43.         $form $this->createForm(ResetPasswordRequestFormType::class);
  44.         $form->handleRequest($request);
  45.         if($form->isSubmitted() && $form->isValid())
  46.         {
  47.             //On va chercher l'utilisateur par son email
  48.             $user $usersRepository->findOneByEmail($form->get('email')->getData());
  49.             //On vérifie si on a un utilisateur avec cet email
  50.             if($user)
  51.             {
  52.                 //On va générer un token de réinitialisation
  53.                 $token $tokenGenerator->generateToken();
  54.                 $user->setResetToken($token);
  55.                 $em->persist($user);
  56.                 $em->flush();
  57.                 //On génère un lien de réinitialisation du mot de passe
  58.                 $url $this->generateUrl('reset_pass', ['token' =>$token], UrlGeneratorInterface::ABSOLUTE_URL);
  59.                 //On crée les données du mail
  60.                 $context compact('url''user');
  61.                 //Envoie du mail
  62.                 $mail->send(
  63.                     'no-replay@voyageur-plus.fr',
  64.                     $user->getEmail(),
  65.                     'Réinitialisation de Mot de Passe',
  66.                     'password_reset',
  67.                     $context
  68.                 );
  69.                 $flashy->success('Email envoyé avec succès ✅ !');
  70.                 // $this->addFlash('success', 'Email envoyé avec succès');
  71.                 return $this->redirectToRoute('app_login');
  72.             }
  73.             //$user est null
  74.             $flashy->error('Un problème est survenu ⛔ !');
  75.             // $this->addFlash('danger', 'Un problème est survenu');
  76.             return $this->redirectToRoute('app_login');
  77.         }
  78.         return $this->render('security/reset_password_request.html.twig', [
  79.             'requestPassForm' => $form->createView()
  80.         ]);
  81.     }
  82.     #[route('reinitialisation-password/{token}'name:'reset_pass')]
  83.     public function resetPass(
  84.         string $token,
  85.         Request $request,
  86.         UsersRepository $usersRepository,
  87.         EntityManagerInterface $em,
  88.         UserPasswordHasherInterface $passwordHasher,
  89.         \MercurySeries\FlashyBundle\FlashyNotifier $flashy
  90.     ): Response
  91.     {
  92.         //On vérifie si on a ce token dans la base de donnée
  93.         $user $usersRepository->findOneByResetToken($token);
  94.         if($user){
  95.             $form $this->createForm(ResetPasswordFormType::class);
  96.             $form->handleRequest($request);
  97.             if($form->isSubmitted() && $form->isValid()){
  98.                 //On efface le token
  99.                 $user->setResetToken('');
  100.                 $user->setPassword(
  101.                     $passwordHasher->hashPassword($user$form->get('password')->getData()
  102.                     )
  103.                 );
  104.                 $em->persist($user);
  105.                 $em->flush();
  106.                 $flashy->success('Ton mot de passe à été réinitialisé avec succès ✅. Test le !');
  107.                 // $this->addFlash('success', 'Ton mot de passe à été réinitialisé avec succès ✅. Test le !');
  108.                 return $this->redirectToRoute('app_login');
  109.             }
  110.             return $this->render('security/reset_password.html.twig', [
  111.                 'passForm' => $form->createView()
  112.             ]);
  113.         }
  114.         $flashy->error('Jeton non valide ⛔ !');
  115.         // $this->addFlash('danger', 'Jeton Invalide');
  116.         return $this->redirectToRoute('app_login');
  117.     }
  118. }