From d1df840ae2e0d7ec03d1ef88985b5c34cceb9231 Mon Sep 17 00:00:00 2001 From: sermandm Date: Fri, 18 Apr 2025 15:18:29 +0200 Subject: [PATCH] =?UTF-8?q?hash=20des=20mots=20de=20passe=20automatique=20?= =?UTF-8?q?termin=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/HegreEtConfort.iml | 1 - src/Controller/CalendrierController.php | 3 ++- src/Controller/UserController.php | 8 +++++++- src/Entity/Utilisateur.php | 15 ++++++++++++++- src/Form/UserType.php | 8 ++++++-- templates/base.html.twig | 4 ++-- 6 files changed, 31 insertions(+), 8 deletions(-) diff --git a/.idea/HegreEtConfort.iml b/.idea/HegreEtConfort.iml index 709c049..615fc7e 100644 --- a/.idea/HegreEtConfort.iml +++ b/.idea/HegreEtConfort.iml @@ -3,7 +3,6 @@ - diff --git a/src/Controller/CalendrierController.php b/src/Controller/CalendrierController.php index d05ed21..90a8eae 100644 --- a/src/Controller/CalendrierController.php +++ b/src/Controller/CalendrierController.php @@ -6,9 +6,10 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; +#[Route('/calendrier')] class CalendrierController extends AbstractController { - #[Route('/calendrier', name: 'app_calendrier')] + #[Route(name: 'app_calendrier_index', methods: ['GET'])] public function index(): Response { return $this->render('calendrier/index.html.twig', [ diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 516ff1f..7b8d7c0 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -9,6 +9,7 @@ use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; use Symfony\Component\Routing\Attribute\Route; #[Route('/user')] @@ -23,13 +24,18 @@ final class UserController extends AbstractController } #[Route('/new', name: 'app_user_new', methods: ['GET', 'POST'])] - public function new(Request $request, EntityManagerInterface $entityManager): Response + public function new(Request $request, EntityManagerInterface $entityManager, UserPasswordHasherInterface $passwordHasher): Response { $user = new Utilisateur(); $form = $this->createForm(UserType::class, $user); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { + // Hash du mot de passe + $plainPassword = $form->get('plainPassword')->getData(); + $hashedPassword = $passwordHasher->hashPassword($user, $plainPassword); + $user->setPassword($hashedPassword); + $entityManager->persist($user); $entityManager->flush(); diff --git a/src/Entity/Utilisateur.php b/src/Entity/Utilisateur.php index 2b70023..2b7cc52 100644 --- a/src/Entity/Utilisateur.php +++ b/src/Entity/Utilisateur.php @@ -31,6 +31,19 @@ class Utilisateur implements UserInterface, PasswordAuthenticatedUserInterface #[ORM\Column(length: 255)] private ?string $Phone = null; + + private ?string $plainPassword = null; + + public function getPlainPassword(): ?string + { + return $this->plainPassword; + } + + public function setPlainPassword(?string $plainPassword): void + { + $this->plainPassword = $plainPassword; + } + /** * @var list The user roles */ @@ -179,6 +192,6 @@ class Utilisateur implements UserInterface, PasswordAuthenticatedUserInterface public function eraseCredentials(): void { // If you store any temporary, sensitive data on the user, clear it here - // $this->plainPassword = null; + $this->plainPassword = null; } } diff --git a/src/Form/UserType.php b/src/Form/UserType.php index c9de90e..a1b3223 100644 --- a/src/Form/UserType.php +++ b/src/Form/UserType.php @@ -6,6 +6,7 @@ use App\Entity\Utilisateur; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\DateType; +use Symfony\Component\Form\Extension\Core\Type\PasswordType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -29,8 +30,11 @@ class UserType extends AbstractType ], 'multiple' => true, ]) - ->add('password', TextType::class) - ; + ->add('plainPassword', PasswordType::class, [ + 'mapped' => false, + 'required' => true, + 'label' => 'Mot de passe', + ]); } public function configureOptions(OptionsResolver $resolver): void diff --git a/templates/base.html.twig b/templates/base.html.twig index 47b33d2..75c4793 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -19,8 +19,8 @@