src/Controller/ResetPasswordController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Classe\Mail;
  4. use App\Entity\ResetPassword;
  5. use App\Entity\User;
  6. use App\Form\ResetPasswordType;
  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\Generator\UrlGeneratorInterface;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class ResetPasswordController extends AbstractController
  15. {
  16.     private $entityManager;
  17.     public function __construct(EntityManagerInterface $entityManager)
  18.     {
  19.         $this->entityManager $entityManager;
  20.     }
  21.     #[Route('/mot-de-passe-oublie'name'reset_password')]
  22.     public function index(Request $request): Response
  23.     {
  24.         if($this->getUser())
  25.         {
  26.              
  27.             return $this->redirectToRoute('home');
  28.         }
  29.              if($request->get('email')) {
  30.              $user $this->entityManager->getRepository(User::class)->findOneByEmail($request->get('email'));
  31.              
  32.                 if ($user){
  33.                     // 1 Enregistrer en base la demande de reset_password
  34.                 $reset_password = new ResetPassword();
  35.                 $reset_password->setUser($user);
  36.                 $reset_password->setToken(uniqid());
  37.                 $reset_password->setCreatedAt(new \DateTimeImmutable);
  38.                 $this->entityManager->persist($reset_password);
  39.                 $this->entityManager->flush();
  40.                 //    Envoyer le Mail à l'utilisateur avec le lien
  41.                 
  42.                 $url $this->generateUrl('update_password', [
  43.                     'token' => $reset_password->getToken(),
  44.                 ],
  45.                 UrlGeneratorInterface::ABSOLUTE_URL
  46.                 
  47.                 );
  48.                 $content " Bonjour ".$user->getFirstname()."<br/>Vous avez demandé à réinitialiser vore mot de passe sur le site SUR LE POUCE.<br/><br/>";
  49.                 $content .= "Merci de bien vouloir cliquer sur le lien suivant pour <a href= '".$url."'>mettre à jour votre mot de passe</a>.";
  50.                 
  51.                 $mail = new Mail();
  52.                 $mail -> send($user->getEmail(), $user->getFirstname().''.$user->getLastname(), 'Réinitialiser votre mot de passe sur le site  Sur le pouce'$content);
  53.                 $this->addFlash('notice''Vous allez recevoir dans quelques secondes un mail avec la procédure pour réinitialiser votre mot de passe.');
  54.             } else {
  55.                 $this->addFlash('notice''Cette adresse email est inconnue.');
  56.             }
  57.                 
  58.             }
  59.             return $this->render('reset_password/index.html.twig');
  60.     
  61.     }
  62.  #[Route('/modifier-mon-mot-de-passe/{token}'name'update_password')]    
  63.         public function update($token,Request $requestUserPasswordHasherInterface $encoder): Response
  64.         {       
  65.         
  66.             $reset_password $this->entityManager->getRepository(ResetPassword::class)->findOneByToken($token);
  67.              if (!$reset_password) {
  68.             return $this->redirectToRoute('reset_password');
  69.             }
  70.             // Vérifier si le createdAt = now - 3h
  71.        
  72.             $now = new \DateTimeImmutable();
  73.         if ($now $reset_password->getCreatedAt()->modify('+ 3 hour')) {
  74.             $this->addFlash('notice''Votre demande de mot de passe a expiré. Merci de la renouveller.');
  75.             return $this->redirectToRoute('reset_password');
  76.         }
  77.         
  78.        // Rendre une vue avec mot de passe et confirmez votre mot de passe.
  79.        $form $this->createForm(ResetPasswordType::class);
  80.        $form->handleRequest($request);
  81.        if ($form->isSubmitted() && $form->isValid()) {
  82.         $new_pwd $form->get('new_password')->getData();
  83.         // Encodage des mots de passe
  84.         $password $encoder->hashPassword($reset_password->getUser(), $new_pwd);
  85.         $reset_password->getUser()->setPassword($password);
  86.         // Flush en base de donnée.
  87.         $this->entityManager->flush();
  88.         // Redirection de l'utilisateur vers la page de connexion.
  89.         $this->addFlash('notice''Votre mot de passe a bien été mis à jour.');
  90.         return $this->redirectToRoute('app_login');
  91.     }
  92.        return $this->render('reset_password/update.html.twig', [
  93.         'form' => $form->createView()
  94.     ]);
  95.     }  
  96. }