IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plugins PHP Discussion :

easyadmin et symfony 6


Sujet :

Plugins PHP

  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2023
    Messages : 12
    Par défaut easyadmin et symfony 6
    Bonjour à tous,

    Je suis ultra-débutant. Je crée un projet avec Symfony 6.3 et PHP 8.2

    J'ai un controller RegistrationController,
    une classe RegistrationFormType::class
    une entité User avec les règles de validation en annotation
    Un template pour le formulaire de registration

    Dans le controller je hash le mot de passe reçu de l'utilisateur et je persist et flush avec l'entity manager

    Tout ça fonctionne


    J'ai installé un dashboard (easyadmin)
    Le bouton créer un user m'affiche un formulaire basé sur l'entité user
    À la soumission les données sont bien enregistrées, mais le mot de passe est en clair dans la bdd (mySQL)

    Pour parer, faute de mieux, et comme je débute j'ai*:

    Créer un nouveau bouton dans le dashbord avec une nouvelle action comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $newUser = Action::new('newuser', 'Créer', 'fas fa-user') 
                ->displayAsLink('register')
                ->linkToRoute('app_register')
                ->createAsGlobalAction();
     
     
            //Affiche-Désaffiche les actions
            return $actions
                ->add(Crud::PAGE_INDEX, $newUser)
                ->disable(Action::NEW )
    J'ai également déaffiché le bouton original
    Ici l'action renvoie la route app_register, celle du controleur inital: RegistrationController,

    ça fonctionne également

    Jaimerais savoir comment hasher le mot de passe en utilisant uniquement le Usercrudcontroller fournie au lieu de registrationController fait maison
    En effet, le problème est identique avec l'action EDIT. En passant par le crudController le mot de passe s'il est modifié reste en clair dans la bdd



    J'ai essayé d'injecter UserPasswordHasherInterface $userPasswordHasher dans un conctructeur de mon crudController
    tenté de créer un bouton et une nouvelle action edit dans la page CRUD::PAGE_EDIT, et utilisé la methode ->linkToCrudAction('myFunction');
    défini une fonction dans le crudController (myFunction() afin de hasher le mot de passe

    ça ne fonctionne pas



    Merci pour ceux qui tenteront de me répondre, car la doc officielle n'explique pas comment faire.
    J'espère avoir été clair

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 429
    Par défaut
    Bonjour,

    Essaye d'appliquer cette solution : https://dev.to/nabbisen/symfony-6-an...-password-3eec

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2023
    Messages : 12
    Par défaut
    Merci beaucoup pour ta précieuse réponse

    Ta solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            $password = TextField::new('password')
                ->setFormType(RepeatedType::class)
                ->setFormTypeOptions([
                    'type' => PasswordType::class,
                    'first_options' => ['label' => 'Password'],
                    'second_options' => ['label' => '(Repeat)'],
                    'mapped' => false,
                ])
                ->setRequired($pageName === Crud::PAGE_NEW)
                ->onlyOnForms()
                ;
            $fields[] = $password;
    Elle utilise entre autre des écouteurs d'évènement et une fonction had-oc pour hasher le mdp

    Tu as répondu très vite car j'ai trouvé in extremis ma solution proche de ta proposition en utilisant la nouvelle option hash_property_path de symfony 6.2 et supérieure qui évite l'écouteur d'évènement et une fonction supplémentaire hashPassword()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Field::new('plainPassword', 'New password')
                ->onlyOnForms()
                ->setFormType(RepeatedType::class)
                ->setFormTypeOptions([
                    'type' => PasswordType::class,
                    'mapped' => false,
                    'first_options' => ['hash_property_path' => 'password', 'label' => 'Nouveau mot de passe'],
                    'second_options' => ['label' => 'Confirmez le mot de passe'],
                ]),
    En effet, depuis symfony 6.2, le 'hash_property_path' est enfin intégré, ce qui évite de surcharger les méthodes parentes relatives au next et edit, de rediriger vers un controller symfony, d'utiliser les écouteurs d'évènements qui soi-disant en passant ne sont pas recommandés par la communauté symfony dans ce cas de figure.

    Il ne faudra pas oublier d'injecter le service UserPasswordHasherInterface dans un constructeur CrudController,(ancien nom UserPasswordEncoderInterface)

    Cette solution est cool

    Lorsque j'édite et que je ne saisis pas de mot de passe, l'ancien est conservé crypté. Cette solution apporte également un niveau de confirmation du mot de passe dans le formulaire et rend invisible le champ dans le dashboard.

    J'espère que ce post basé sur la nouvelle version servira aux membres de ce forum. Car il y a des ressources qui sont obsolètes sur le net (et c'est normal)


    Dur quand on est débutant comme moi.

    En tout cas merci pour ta contribution et pour le lien du site que tu proposes qui me semble très intéressant.

Discussions similaires

  1. [4.x] Symfony EasyAdmin 3 - Override template HTML et Controller
    Par nexusmusic00 dans le forum Symfony
    Réponses: 0
    Dernier message: 15/05/2022, 01h41
  2. CKEditor ne marche pas easyAdmin 3 symfony 5.3.10
    Par TBA_78 dans le forum Plugins
    Réponses: 0
    Dernier message: 10/11/2021, 18h54
  3. [4.x] Extends non fonctionnel avec EasyAdmin 3 dans Symfony 4
    Par FiiiGaARDo dans le forum Symfony
    Réponses: 2
    Dernier message: 20/02/2021, 22h19
  4. Symfony 5, easyadmin 3, insertion id champ caché
    Par HomerV dans le forum Symfony
    Réponses: 0
    Dernier message: 19/02/2021, 14h16
  5. [1.x] Problème installation symfony
    Par Nout dans le forum Symfony
    Réponses: 3
    Dernier message: 27/05/2007, 22h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo