src/Controller/ResettingPwdController.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Services\Mailer;
  5. use App\Services\SendMail;
  6. use App\Form\ResettingType;
  7. use App\Repository\UserRepository;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use App\Form\ResetPasswordRequestFormType;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  14. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  15. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  16. class ResettingPwdController extends AbstractController 
  17. {
  18.     // /**
  19.     //  * @Route("/mot-de-passe-oublie", name="forgot_pwd")     
  20.     //   */
  21.     #[Route('/mot-de-passe-oublie'name:'forgot_pwd')]
  22.     public function request(Request $requestUserRepository $userRpoTokenGeneratorInterface $tokenGeneratorEntityManagerInterface $managerSendMail $mailer)
  23.     {
  24.         // création d'un formulaire "à la volée", afin que l'internaute puisse renseigner son mail        
  25.         // $form = $this->createFormBuilder()->add('email', EmailType::class, [ 'constraints' => [ new Email(), new NotBlank()]])->getForm();
  26.         $form $this->createForm(ResetPasswordRequestFormType::class);
  27.         $form->handleRequest($request);
  28.         if ($form->isSubmitted() && $form->isValid()) {
  29.             // voir l'épisode 2 de cette série pour retrouver la méthode loadUserByUsername:
  30.             $user $userRpo->findOneBy(['email' => $form->getData()['email']]);
  31.             // aucun email associé à ce compte.
  32.             if (!$user) {
  33.                 $request->getSession()->getFlashBag()->add('error'"Cet email n'existe pas.");
  34.                 return $this->redirectToRoute("forgot_pwd");
  35.             }
  36.             // dd($user->getEmail());
  37.             // création du token            
  38.             $user->setToken($tokenGenerator->generateToken());
  39.             // enregistrement de la date de création du token            
  40.             $user->setPasswordRequestedAt(new \Datetime());
  41.             $manager->persist($user);
  42.             $manager->flush();
  43.             
  44.             $bodyMail $mailer->createBodyMail('auth/reset_email.html.twig', [ 'user' => $user]);
  45.             $mailer->sendEmail(from'Abidjan.net@weblogy.com'to$user->getEmail(), subject'Réinitialisation du mot de passe' ,body$bodyMail);
  46.             // AUTRES METHODES --->>>>>Injetcter de dependance MailerInterface<<<<<<----
  47.         //      $email = (new Email())
  48.         //     ->from('yemakarios70@gmail.com')
  49.         //     ->to('brouange48@gmail.com')
  50.         //     //->cc('cc@example.com')
  51.         //     //->bcc('bcc@example.com')
  52.         //     //->replyTo('fabien@example.com')
  53.         //     //->priority(Email::PRIORITY_HIGH)
  54.         //     ->subject('Time for Symfony Mailer!')
  55.         //     ->text('Sending emails is fun again!')
  56.         //     ->html('<p>See Twig integration for better HTML integration!</p>');
  57.         // $mailer->send($email);
  58.         // $email = (new TemplatedEmail())
  59.         // ->from(new Address('no-reply@abidjan.net', 'Abidjan.net'))
  60.         // ->to($user->getEmail())
  61.         // ->subject('Demande réinitialisation de mot de passe')
  62.         // ->htmlTemplate('front/auth/reset_email.html.twig')
  63.         // ->context(['user' => $user]);
  64.         // $mailer->send($email);
  65.             // on utilise le service Mailer créé précédemment            
  66.             $request->getSession()->getFlashBag()->add('success'"Un email vous sera envoyé afin que vous puissiez renouveller votre mot de passe. Le lien que vous recevrez sera valide 24h.");
  67.             // dd($mailer);
  68.             return $this->redirectToRoute("security.login");
  69.         }
  70.         return $this->render('auth/reset_password.html.twig', ['form' => $form->createView()]);
  71.     }
  72.     
  73.     // si supérieur à 10min, retourne false    
  74.     // sinon retourne false    
  75.     private function isRequestInTime(\Datetime $passwordRequestedAt null)
  76.     {
  77.         if ($passwordRequestedAt === null) {
  78.             return false;
  79.         }
  80.         $now = new \DateTime(); 
  81.         $interval $now->getTimestamp() - $passwordRequestedAt->getTimestamp();
  82.         $daySeconds 60 10
  83.         $response $interval $daySeconds false $reponse true
  84.         return $response
  85.     }
  86.     //  /**
  87.     //  * @Route("/mot-de-passe-oublie/{id}/{token}", name="pwd_reset")     
  88.     //   */
  89.     #[Route('/mot-de-passe-oublie/{id}/{token}'name:'pwd_reset')]
  90.     public function resetting($id$tokenRequest $requestUserRepository $userRpoUserPasswordEncoderInterface $passwordEncoder
  91.     { 
  92.         
  93.         // Récupération de l'utilisateur
  94.         $user $userRpo->findOneBy(['id'=>$id]);
  95.         // interdit l'accès à la page si:        
  96.         // le token associé au membre est null        
  97.         // le token enregistré en base et le token présent dans l'url ne sont pas égaux        
  98.         // le token date de plus de 10 minutes        
  99.         if ($user->getToken() === null || $token !== $user->getToken() || !$this->isRequestInTime($user->getPasswordRequestedAt())) 
  100.         {
  101.             $request->getSession()->getFlashBag()->add('warning'"Delai expiré, veuillez réessayer !");
  102.             return $this->redirectToRoute('forgot_pwd');
  103.         }
  104.         $form $this->createForm(ResettingType::class);
  105.         $form->handleRequest($request);
  106.         // dd($form->getData()['plainPassword']);
  107.         if ($form->isSubmitted() && $form->isValid()) {
  108.             $password $passwordEncoder->encodePassword($user$form->getData()['plainPassword']);
  109.             // $password = $passwordEncoder->encodePassword($user, $form->getData()->getPlainPassword());
  110.             $user->setPassword($password);
  111.             // réinitialisation du token à null pour qu'il ne soit plus réutilisable            
  112.             $user->setToken(null);
  113.             $user->setPasswordRequestedAt(null);
  114.             $em $this->getDoctrine()->getManager();
  115.             $em->persist($user);
  116.             $em->flush();
  117.             $request->getSession()->getFlashBag()->add('success'"Votre mot de passe a été renouvelé.");
  118.             return $this->redirectToRoute('security.login');
  119.         }
  120.         return $this->render('auth/reset.html.twig', ['form' => $form->createView()]);
  121.     }
  122. }