src/Controller/SecurityController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Form\ResetPasswordFormType;
  4. use App\Form\ResetPasswordRequestFormType;
  5. use App\Repository\UserRepository;
  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. use Symfony\Component\Validator\Constraints as Assert;
  17. class SecurityController extends AbstractController
  18. {
  19.     #[Route(path: '/login', name: 'app_login')]
  20.     public function login(AuthenticationUtils $authenticationUtils): Response
  21.     {
  22.  
  23.         // get the login error if there is one
  24.         $error = $authenticationUtils->getLastAuthenticationError();
  25.         // last username entered by the user
  26.         $lastUsername = $authenticationUtils->getLastUsername();
  27.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
  28.     }
  29.     #[Route(path: '/logout', name: 'app_logout')]
  30.     public function logout(): void
  31.     {
  32.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  33.     }
  34.     #[Route(path: '/forgot-mdp', name: 'forgotten_password')]
  35.     public function forgottenPassword(
  36.         Request $request,
  37.         UserRepository $userRepository,
  38.         TokenGeneratorInterface $tokenGeneratorInterface,
  39.         EntityManagerInterface $entityManager,
  40.         SendMailService $mail
  41.     ): response
  42.     {
  43.         $form = $this->createForm(ResetPasswordRequestFormType::class);
  44.         $form->handleRequest($request);
  45.         if($form->isSubmitted() && $form->isValid()) {
  46.          //on va chercher user par son email
  47.          $user = $userRepository->findOneByEmail($form->get('email')->getData());
  48. //         //on vérifie si on a un utilisateur
  49.          if($user){
  50.             //on genere token de reinitialisation
  51.             $token = $tokenGeneratorInterface->generateToken();
  52.             $user->setResetToken($token);
  53.             $entityManager->persist($user);
  54.             $entityManager->flush();
  55.             //on genere un lien de reinitialisation
  56.             $url = $this->generateUrl('reset_pass', ['token' => $token], UrlGeneratorInterface::ABSOLUTE_URL);
  57.              //  dd($url);
  58.                 //onn crée les donnees du mail
  59.                 $context = compact('url', 'user');
  60.             //dd($context);
  61.              // Utilisez une adresse e-mail autorisée par IONOS comme expéditeur
  62.              $fromEmail = 'basenautique@'; // Adresse IONOS autorisée
  63.              // Envoi du mail
  64.              $mail->send(
  65.                  $fromEmail,
  66.                  $user->getEmail(),
  67.                  'Réinitialisation du mot de passe',
  68.                  'password_reset',
  69.                  $context
  70.              );
  71.               // dd($mail);
  72.                 $this->addFlash('success', 'un lien de réinitialisation vient de vous être envoyé');
  73.                 return $this->redirectToRoute('app_consultez-vos-mails');
  74.          }
  75.        $this->addFlash('warning', 'Un problème est survenu, identifiant ou mdp incorrect');
  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('/consultez-vos-mails', name: 'app_consultez-vos-mails')]
  83.     public function index()
  84.     {
  85.         return $this->render('emails/consultezmail.html.twig');
  86.     }
  87.     #[Route(path: '/forgot-mdp/{token}', name: 'reset_pass')]
  88.     public function resetPass(
  89.         string $token,
  90.         Request $request,
  91.         UserRepository $userRepository,
  92.         EntityManagerInterface $entityManager,
  93.         UserPasswordHasherInterface $passwordHasher
  94.     ): Response
  95.     {
  96.         // On vérifie si on a ce token dans la base
  97.         $user = $userRepository->findOneByResetToken($token);
  98.      //   dd($user);
  99.         if($user){
  100.             $form = $this->createForm(ResetPasswordFormType::class);
  101.         $form->handleRequest($request);
  102.             if($form->isSubmitted() && $form->isValid()){
  103.                 // On efface le token
  104.                 $user->setResetToken('');
  105.                 $user->setPassword(
  106.                     $passwordHasher->hashPassword(
  107.                         $user,
  108.                         $form->get('password')->getData()
  109.                     )
  110.                 );
  111.                 $entityManager->persist($user);
  112.                 $entityManager->flush();
  113.                 $this->addFlash('success', 'Mot de passe changé avec succès');
  114.                 return $this->redirectToRoute('app_login');
  115.             }
  116.             return $this->render('security/reset_password.html.twig', [
  117.                 'passForm' => $form->createView()
  118.             ]);
  119.         }
  120.         $this->addFlash('danger', 'Jeton invalide');
  121.         return $this->redirectToRoute('app_login');
  122.     }
  123.    
  124.     #[Route('/access-denied', name: 'access_denied')]
  125.     public function accessDenied(): Response
  126.     {
  127.         return $this->render('security/access_denied.html.twig');
  128.     }
  129. }