src/Controller/SecurityController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Form\ResetPasswordRequestFormType;
  4. use App\Form\ResetPasswordFormType;
  5. use App\Repository\UsersRepository;
  6. use App\Service\SendMailService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Doctrine\ORM\Mapping\Entity;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  16. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  17. class SecurityController extends AbstractController
  18. {
  19.     private $entityManager;
  20.     public function __construct(EntityManagerInterface $entityManager){
  21.         $this->entityManager $entityManager;
  22.     }
  23.     #[Route(path'/connexion'name'app_login')]
  24.     public function login(AuthenticationUtils $authenticationUtils): Response
  25.     {
  26.         // if ($this->getUser()) {
  27.         //     return $this->redirectToRoute('target_path');
  28.         // }
  29.         // get the login error if there is one
  30.         $error $authenticationUtils->getLastAuthenticationError();
  31.         // last username entered by the user
  32.         $lastUsername $authenticationUtils->getLastUsername();
  33.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  34.     }
  35.     #[Route(path'/deconnexion'name'app_logout')]
  36.     public function logout(): void
  37.     {
  38.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  39.     }
  40.     #[Route(path'/mot-de-passe-oublie'name'app_forgotten_password')]
  41.     public function ForgottenPassword(
  42.         Request $request,
  43.         UsersRepository $usersRepository,
  44.         TokenGeneratorInterface $tokenGeneratorInterface,
  45.         EntityManagerInterface $em,
  46.         SendMailService $sendmail
  47.         ):Response
  48.     {
  49.         $resetForm=$this->createForm(ResetPasswordRequestFormType::class);
  50.         $resetForm->handleRequest($request);
  51.         if ($resetForm->isSubmitted() && $resetForm->isValid()){
  52.             $email=$resetForm->get('email')->getData();
  53.             $user $usersRepository->findOneByEmail($email);
  54.             if ($user){
  55.                 //Génération d'un token
  56.                 $token=$tokenGeneratorInterface->generateToken();
  57.                 $user->setResetToken($token);
  58.                 $em->persist($user);
  59.                 $em->flush();
  60.                 //génération d'un lien de réinitialisation du mot de passe
  61.                 $url $this->generateUrl(
  62.                     'app_resetpassword',
  63.                     ['token'=>$token],
  64.                     UrlGeneratorInterface::ABSOLUTE_URL
  65.                 );
  66.                 $senderMail $this->getParameter('sender_mail');
  67.                 $sendmail->send(
  68.                     $senderMail,
  69.                     $user->getEmail(),
  70.                     "Réinitilisation de mot de passe",
  71.                     "passwordreset",
  72.                     [
  73.                         'user'=>$user,
  74.                         'url' =>$url,
  75.                     ]
  76.                 );
  77.                 $this->addFlash('success','Email envoyé avec succès.');
  78.                 return $this->redirectToRoute('app_login');
  79.             }
  80.             $this->addFlash('danger','Un problème est survenu.');
  81.             return $this->redirectToRoute('app_login');
  82.         };
  83.         return $this->render('security/reset_password_request.html.twig',
  84.         ['resetForm' => $resetForm->createView()]);
  85.     }
  86.     #[Route(path'/mot-de-passe-oublie/{token}'name'app_resetpassword')]
  87.     function ResetPassword(
  88.         string $token,        
  89.         Request $request,
  90.         UsersRepository $usersRepository,
  91.         EntityManagerInterface $entityManager,
  92.         UserPasswordHasherInterface $passwordHasher
  93.     ):Response{
  94.         //Vérifier si ce token est dans la base de données
  95.         $user $usersRepository->findOneByResetToken($token);
  96.         //dd($user);
  97.         if($user){
  98.             $form $this->createForm(ResetPasswordFormType::class);
  99.             //dd($user);
  100.             $form->handleRequest($request);
  101.             if($form->isSubmitted() && $form->isValid()){
  102.                 //Effacement du TOKEN
  103.                 $user->setResetToken('');
  104.                 $user->setPassword(
  105.                     $passwordHasher->hashPassword(
  106.                         $user,
  107.                         $form->get('password')->getData()
  108.                     )
  109.                 );
  110.                 $entityManager->persist($user);
  111.                 $entityManager->flush();
  112.                 $this->addFlash('success','Mot de passe changé avec succès.');
  113.                 return $this->redirectToRoute('app_login');
  114.             }
  115.             return $this->render('security/reset_password.html.twig',[
  116.                 'passForm' => $form->createView()
  117.             ]);
  118.         };
  119.         $this->addFlash('danger','Jeton invalide');
  120.         return $this->redirectToRoute('app_login');
  121.         //return $this->render('security/reset_password_request.html.twig');
  122.     }
  123. }