Bonjour à tous,
merci à Bidule.
Problème résolu.
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
4 réponses
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();
}
}
Merci pour l'aide :)