Bonjour,
Je rencontre un petit problème et je viens solliciter de l'aide. Je ne sais si le sujet aurait déjà été évoquer, mais je développe un site avec Symfony 5 et comme backend Easyadmin 3. Depuis un moment je peine à encoder le mot de passe qui s'enrégistre en clair dans la base de données et il n'y a pas de password field dans la documentation non plus. Quelqu'un aurait une solution à me proposer ?
PS: le but de cet encodage est de pouvoir créer les administrateurs dans le backoffice et de leur assigner des rôles particuliers; tout ceci pour éviter que le client reste dépendant de nous. Sinon j'ai déjà utilisé l'option fixtures. Mais je voudrais beaucoup que mes clients puissent eux-même créer les admins.
Merci à l'avance
Salut,
Ceci devrait pouvoir t'aider https://stackoverflow.com/questions/54744836/symfony-4-easyadmin-how-to-encrypt-passwords
Au final il faut encoder le password avant de le save.
salut,
essai avec ça ;)
Je passe par les eventSubscriber afin de gérer les mot de passe lors des ajouts et des mise à jour de mot de passe.
Il faut juste ajouter un dossier "EventSubscriber" puis ajouter la class suivante : "EasyAdminSubscriber.php" et le code qui va avec
<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class EasyAdminSubscriber implements EventSubscriberInterface
{
private $entityManager;
private $passwordEncoder;
public function __construct(EntityManagerInterface $entityManager, UserPasswordEncoderInterface $passwordEncoder)
{
$this->entityManager = $entityManager;
$this->passwordEncoder = $passwordEncoder;
}
public static function getSubscribedEvents()
{
return [
BeforeEntityPersistedEvent::class => ['addUser'],
BeforeEntityUpdatedEvent::class => ['updateUser'], //surtout utile lors d'un reset de mot passe plutôt qu'un réel update, car l'update va de nouveau encrypter le mot de passe DEJA encrypté ...
];
}
public function updateUser(BeforeEntityUpdatedEvent $event)
{
$entity = $event->getEntityInstance();
if (!($entity instanceof User)) {
return;
}
$this->setPassword($entity);
}
public function addUser(BeforeEntityPersistedEvent $event)
{
$entity = $event->getEntityInstance();
if (!($entity instanceof User)) {
return;
}
$this->setPassword($entity);
}
/**
* @param User $entity
*/
public function setPassword(User $entity): void
{
$pass = $entity->getPassword();
$entity->setPassword(
$this->passwordEncoder->encodePassword(
$entity,
$pass
)
);
$this->entityManager->persist($entity);
$this->entityManager->flush();
}
}