src/Controller/ChangePasswordController.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. class ChangePasswordController extends AbstractController
  10. {
  11. #[Route('/change-password', name: 'change_password')]
  12. public function index(
  13. Request $request,
  14. UserPasswordHasherInterface $passwordHasher,
  15. EntityManagerInterface $em
  16. ): Response
  17. {
  18. if ($this->getUser() instanceof User) {
  19. $user = $this->getUser();
  20. $passwordChangedAt = $user->getPasswordChangedAt();
  21. if (!$passwordChangedAt || (new \DateTime() >= (clone $passwordChangedAt)->modify('+90 days'))) {
  22. $this->addFlash('warning', 'Votre mot de passe a expiré.');
  23. }
  24. }
  25. $user = $this->getUser();
  26. if (!$user) {
  27. return $this->redirectToRoute('login');
  28. }
  29. if ($request->isMethod('POST')) {
  30. $oldPassword = $request->request->get('old_password');
  31. $newPassword = $request->request->get('new_password');
  32. if (!$passwordHasher->isPasswordValid($user, $oldPassword)) {
  33. $this->addFlash('error', 'Ancien mot de passe incorrect');
  34. } else {
  35. $user->setPassword(
  36. $passwordHasher->hashPassword($user, $newPassword)
  37. );
  38. $user->setPasswordChangedAt(new \DateTime());
  39. // 🔥 nettoyage FOS
  40. //$user->setSalt(null);
  41. if (method_exists($user, 'setLegacyPassword')) {
  42. $user->setLegacyPassword(null);
  43. }
  44. $em->flush();
  45. $this->addFlash('success', 'Mot de passe modifié avec succès');
  46. return $this->redirectToRoute('login');
  47. }
  48. }
  49. return $this->render('security/change_password.html.twig');
  50. }
  51. }