8768 sujets

Développement web côté serveur, CMS

Bonjour!

J'ai mis en place une méthode put&patch pour mes Users.

Le soucis c'est que je n'arrive pas à encoder le password avec cette méthode.
Lorsqu'il est modifié, il apparait en dur dans la base de données...


    /**
     * Edit user PUT
     * 
     * @Route("/api/users/{id<\d+>}", name="api_users_put", methods={"PUT", "PATCH"})
     */
    public function putAndPatch(User $user = null, EntityManagerInterface $em, SerializerInterface $serializer, Request $request, ValidatorInterface $validator)
    {
        //404
        if($user === null)
        {
            return $this->json(["error" => "Utilisateur non trouvé."], Response::HTTP_NOT_FOUND);
        }

        $jsonContent = $request->getContent();

        // Deserializes given data from front in the User object to modify

        $userMod = $serializer->deserialize($jsonContent, User::class, 'json', [AbstractNormalizer::OBJECT_TO_POPULATE => $user]);
        
        // Deserialized entity validation
        
        $errors = $validator->validate($user);

        // Errors generation with 422 status

        if(count($errors) > 0)
        {
            return $this->json($this->generateErrors($errors), Response::HTTP_UNPROCESSABLE_ENTITY);
        }

        $em->flush();

        return $this->json(["message" => "Informations modifiées."], Response::HTTP_OK);
    }


Est-ce que quelqu'un aurait une idée?
Merci d'avance!
Bonjour,

c'est normal, car à aucun moment tu lui demande d'encoder le mot de passe.

il faut passer par le "UserPasswordEncoderInterface"
C'est un exemple de création d'un compte avec justement l'utilisation du UserPasswordEncoderInterface.




/**
     * @Route("/new", name="user_new", methods={"GET","POST"})
     * @param Request $request
     * @param UserPasswordEncoderInterface $passwordEncoder
     * @return Response
     */
    public function new(Request $request, UserPasswordEncoderInterface $passwordEncoder): Response
    {
        $user = new User();
        $form = $this->createForm(UserType::class, $user);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $user->setPassword(
                $passwordEncoder->encodePassword(
                    $user,
                    $form->get('password')->getData()
                )
            );
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($user);
            $entityManager->flush();

            return $this->redirectToRoute('user_index');
        }

        return $this->render('user/new.html.twig', [
            'user' => $user,
            'form' => $form->createView(),
        ]);
    }