Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony 4] - security.password_encoder not found

Sujet résolu
    13 mars 2019 à 2:02:00

    Bonjour je travaille sur un petit projet personnel, en utilisant le Framework Symfony.

    Je suis actuellement en train de travailler sur l'enregistrement d'utilisateur dans la BDD. Pour m'aider je regarde ceci : 

    https://codereviewvideos.com/course/symfony-3-for-beginners/video/registration-form-part-2

    Comme vous avez peut -être remarqué il utilise symfony 3, et utilise à un moment security.password_encoder. Or quand je l'utilise, ça me marque une erreur comme ça :

    security.password_encoder

    Je me suis donc renseigné pour voir si il y a avait la même chose mais pour Symfony 4, mais je n'ai pas trouvé.

    Je viens donc demandé si vous aviez une idée pour résoudre mon problème.

    Je vous donne mon code pour mon controller :

    class RegistrationController extends AbstractController
    {
        /**
         * @Route("/register", name="registration")
         *
         */
        public function index(Request $request)
        {
    
            $user = new User();
    
    
            $form = $this->createForm(UserType::class, $user);
    
            $form->handleRequest($request);
    
            if($form->isSubmitted() && $form->isValid()){
    
                
    
                $password= $this
                ->get('security.password_encoder')
                ->encodePassword($user, $user->getPlainPassword()
            );
    
                $user->setPassword($password);
    
                $manager = $this->getDoctrine()->getManager();
    
                $manager->persist($user);
                $manager->flush();
    
                $this->addFlash('success', 'Tu es bien enregistré !');
    
                $this->redirectToRoute('homepage');
            }
    
            return $this->render('registration/index.html.twig', [
                'registration_form' => $form->createView(),
            ]);
        }
    }



    Merci par avance. :D

    Mathieu.


    • Partager sur Facebook
    • Partager sur Twitter

    Mathieu Gervais

      13 mars 2019 à 9:30:35

      Bonjour à toi,

      Tu n'as pas un message d'erreur plus complet qui détail mieux ?

      Je te conseil de regarder directement dans la documentation officiel de Symfony 4, voici le lien menant vers l'encodage de mot de passe:

      https://symfony.com/doc/4.0/security/password_encoding.html

      -
      Edité par Binary Lost 13 mars 2019 à 9:31:54

      • Partager sur Facebook
      • Partager sur Twitter
        13 mars 2019 à 17:18:03

        Bonjour,

        J'ai ré-essayé en suivant la doc mais une fois avoir fait les modifications j'ai ce message d'erreur :

        Argument 1 passed to Symfony\Component\Security\Core\Encoder\UserPasswordEncoder::encodePassword() must implement interface Symfony\Component\Security\Core\User\UserInterface, instance of App\Entity\User given, called in D:\wamp64\www\lordweb\src\Controller\RegistrationController.php on line 35

        Et j'ai beau instancier tout ce que je veux ça ne change rien...

        Voici mon code à présent :

        <?php
        
        namespace App\Controller;
        
        use App\Entity\User;
        use App\Form\UserType;
        use Symfony\Component\Routing\Annotation\Route;
        use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
        use Symfony\Component\HttpFoundation\Request;
        use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
        use Symfony\Component\Security\Core\User\UserInterface;
        
        class RegistrationController extends AbstractController
        {
            /**
             * @Route("/register", name="registration")
             *
             */
            public function index(Request $request, UserPasswordEncoderInterface $encoder)
            {
        
                $user = new User();
        
        
                $form = $this->createForm(UserType::class, $user);
        
                $form->handleRequest($request);
        
                if($form->isSubmitted() && $form->isValid()){
        
        
                    $plainPassword = $user->getPlainPassword();
                    $encoded = $encoder->encodePassword($user, $plainPassword);
                
                    $user->setPassword($encoded);
        
                    $manager = $this->getDoctrine()->getManager();
        
                    $manager->persist($user);
                    $manager->flush();
        
                    $this->addFlash('success', 'Tu es bien enregistré !');
        
                    $this->redirectToRoute('homepage');
                }
        
                return $this->render('registration/index.html.twig', [
                    'registration_form' => $form->createView(),
                ]);
            }
        }
        



        -
        Edité par LordIonBlade 13 mars 2019 à 17:18:29

        • Partager sur Facebook
        • Partager sur Twitter

        Mathieu Gervais

          13 mars 2019 à 17:55:54

          le message indique que ta classe User doit implémenter l’interface UserInterface.

          • Partager sur Facebook
          • Partager sur Twitter
            13 mars 2019 à 21:57:19

            Désolé, en effet j'avais mal implémenté...

            Tout fonctionne merci pour l'aide !

            • Partager sur Facebook
            • Partager sur Twitter

            Mathieu Gervais

              5 mai 2021 à 19:01:49

              Bonjour, je me permet de relancer ce ticket car j'ai la même erreur que OP, mais je ne comprend pas la solution qui a été apportée, en effet il y a bien :

              useSymfony\Component\Security\Core\User\UserInterface;

              donc pourquoi le User était mal implémenté?

              • Partager sur Facebook
              • Partager sur Twitter
                2 juin 2021 à 4:30:49

                Vous avez trouvez la solution ?

                DanielPresa a écrit:

                Bonjour, je me permet de relancer ce ticket car j'ai la même erreur que OP, mais je ne comprend pas la solution qui a été apportée, en effet il y a bien :

                useSymfony\Component\Security\Core\User\UserInterface;

                donc pourquoi le User était mal implémenté?



                • Partager sur Facebook
                • Partager sur Twitter
                  18 juin 2021 à 14:14:51

                  Bonjour ZouariNajd,

                  Tout d'abord désolé pour le temps de réponse, j'espère que tu as trouvé la solution.

                  Pour ma part ça fait un an et demi que j'ai arrêté Symfony mais si mes souvenir sont bons, après avoir importé UserInterface via le use il faut l'instancier en ajoutant :

                  namespace App\Security\User;
                  
                  use Symfony\Component\Security\Core\User\UserInterface;
                  use Symfony\Component\Security\Core\User\EquatableInterface;
                  
                  class WebserviceUser implements UserInterface, EquatableInterface
                  {
                  ...Code

                  J'espère que ça fonctionne il me semble que mon erreur avait été cet oubli tout simplement...

                  Bonne journée et bon courage.





                  • Partager sur Facebook
                  • Partager sur Twitter

                  Mathieu Gervais

                  [Symfony 4] - security.password_encoder not found

                  × 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.
                  • Editeur
                  • Markdown