J'ai écris un code, je n'ai pas d'erreur symfony, mais lorsque je renseigne le mot de passe actuel j'ai "mon" message mentionnant que le mot de passe n'est pas celui de la BDD, j'ai fais un dump avant l'envoie du formulaire, j'ai un mot de passe crypté, puis un dump après validation, et là c'est le mot de passe que j'ai écris "12345689"
Est-ce-que mon problème ne vient pas d'ici ? quand symfony lit mon mot de passe, le voit-il crypté ?
Ci-dessous mon code :
/**
* @Route("/{id}/password_modification", name="password_modification")
*/
public function modificationPassword(User $user, Request $request, UserPasswordEncoderInterface $encoder, EntityManagerInterface $manager)
{
$passwordUpdate = new PasswordUpdate();
$form = $this->createForm(PasswordUpdateType::class, $passwordUpdate);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
if(!password_verify($passwordUpdate->getOldPassword(), $user->getPassword()))
{
$form->get('oldPassword')->addError(new FormError("Le mot de passe renseigné ne correspond pas à votre mot de passe actuel"));
}
else
{
$newPassword = $passwordUpdate->getNewPassword();
$hash = $encoder->encodePassword($user, $newPassword);
$user->setPassword($hash);
$manager->persist($user);
$manager->flush();
$this->addFlash('success', "Votre mot de passe a bien été modifié !");
return $this->redirectToRoute('profil');
}
}
return $this->render('user/password_modification.html.twig', [
'form' => $form->createView(),
'user' => $user
]);
}
Je vous en remercie par avance.
- Edité par PierreRichard78 23 janvier 2020 à 10:07:27
Déjà, est-ce-que Symfony lit mon mot de passe ou seulement l'encryptage ? car le dump le rapporte crypté pourtant lors d'une connexion ça ne pose pas de problème, je suis un peu confus sur ce problème
Tu soulèves un point, quand je fais les tests j'utilise plutôt setOldPassword, pour voir ce que j'ai écris dans l'input, ça me met 123456, c'est pour ça que je me suis posé la question si le problème vient pas de l'encodage, d'un côté crypté, de l'autre non...
Effectivement, de base le getOldPassword est null car il n'est relié à rien, ce n'est pas une entity transcrite en BDD c'est juste une interface qui compare 2 variables
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class PasswordUpdate
{
private $oldPassword;
/**
* @Assert\Length(min=6, minMessage="Votre mot de passe doit faire au moins 6 caractères !")
*/
private $newPassword;
/**
* @Assert\EqualTo(propertyPath="newPassword", message="Vous n'avez pas correctement confirmé votre nouveau mot de passe")
*/
private $confirmPassword;
public function getOldPassword(): ?string
{
return $this->oldPassword;
}
public function setOldPassword(string $oldPassword): self
{
$this->oldPassword = $oldPassword;
return $this;
}
public function getNewPassword(): ?string
{
return $this->newPassword;
}
public function setNewPassword(string $newPassword): self
{
$this->newPassword = $newPassword;
return $this;
}
public function getConfirmPassword(): ?string
{
return $this->confirmPassword;
}
public function setConfirmPassword(string $confirmPassword): self
{
$this->confirmPassword = $confirmPassword;
return $this;
}
}
PasswordUpdateType :
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
class PasswordUpdateType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('oldPassword', PasswordType::class, array(
'mapped' => false,
'label' => 'Ancien mot de passe',
))
->add('newPassword', PasswordType::class, array(
'mapped' => false,
'label' => 'Ancien mot de passe'
))
->add('confirmPassword', PasswordType::class, array(
'mapped' => false,
'label' => 'Ancien mot de passe'
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
// Configure your form options here
]);
}
}
Quel problème ? toujours null avec $passwordUpdate->getOldPassword() ? Quel dump te donne tes mots de passe non hashés (ce qui est normal d'ailleurs) , celui de $form->getData() ?
c'est comme ça que password_verify fonctionne, 1ère entrée mot de passe en clair et en 2ème un hashé. si tu as les bonnes valeurs dans getData alors autant l'utiliser directement $passwordUpdate = $form->getData();
if($form->isSubmitted() && $form->isValid())
{
$passwordUpdate = $form->getData();
if(!password_verify($passwordUpdate->getOldPassword(), $user->getPassword()))
{
$form->get('oldPassword')->addError(new FormError("Le mot de passe renseigné ne correspond pas à votre mot de passe actuel"));
dump($form->getData());
}
si c'est le cas, c'est toujours pas ça... si tu me dis que symfony lit pareil les mots de passe cryptés ou non, je ne vois pas pourquoi alors quand je remplie le OldPassword qui est celui en bdd c'est écrit que je me suis trompé..
juste après la ligne 3 de ce code, que te donne un dump de ta $passwordUpdate->getOldPassWord()? essaie de lire la documentation de password_verify ,
https://3v4l.org/PAKs5 tu vois que ça fonctionne avec ton mot de passe 123456 et le hash donné donc le soucis est au niveau de $passwordUpdate->getOldPassword()
oui c'est ça qui est bizarre, c'est pour ça que tant que je suis en localhost, je ne me complique pas la vie sur les mots de passe avec des conditions, je reste simple avec toujours 123456
le dump me le retourne bien, je ne comprends pas le problème
Non par contre là il n y a pas de correspondance https://3v4l.org/SvYUW , ce n'est pas le même hash que ce que tu as donné précédemment , il faudrait bien faire tes tests
ah oui pardon, j'ai entre temps recrée un compte, c'est ma faute.
Je viens de retourner sur mon adresse principale, je ne peux plus me connecter avec 123456 j'ai tenté 123456789 (le nouveau mot de passe) et je suis connecté
je viens d'essayer de rechanger mon mot de passe et ça fonctionne ... euuh je suis content mais je n'ai pas compris et j'ai rien touché
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
la chance sourit aux audacieux
Xavier LEFEBURE - https://www.notifall.com
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux
la chance sourit aux audacieux