在使用Symfony 4要求输入密码后如何修改用户信息

问题描述 投票:0回答:1

我想创建一个页面,允许用户修改他的个人信息。我希望他输入当前密码来修改任何信息。

我在提交表单时基于所连接的用户创建了一个表单,并且该表单有效,我想使用我的passwordEncoder的isPasswordValid()函数检查密码是否有效。

我的问题是,当使用$ user作为参数调用此函数时,它总是返回false。我发现了此问题的出处,这是因为在提交表单后,已将$ user用作参数进行了修改。我尝试声明另一个变量来存储我的初始用户(例如$ dbUser),并使用另一个变量来实例化表单,但是当我转储$ dbUser它已被修改,我不知道为什么...

提交后不应更改该变量,因为它从未使用过...我找不到我做错的事情...

   /**
     * @Route("/mes-infos", name="account_infos")
     */
    public function showMyInfos(Request $request, UserRepository $userRepo)
    {
        $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');

        $user = $this->getUser();
        // $dbUser = $userRepo->findOneBy(['id' => 13]);


        $form = $this->createForm(UserModificationType::class, $user);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $enteredPassword = $request->request->get('user_modification')['plainPassword'];
            $passwordEncoder = $this->passwordEncoder;
            $manager = $this->getDoctrine()->getManager();

            if ($passwordEncoder->isPasswordValid($user, $enteredPassword)) {
                dd('it works!!!!!');
                // $manager->persist($user);
                // $manager->flush();
            } else {
                dd('It\'s not!!!!');
            }
        }
        return $this->render('account/myaccount-infos.html.twig', [
            'form' => $form->createView()
        ]);
    }
symfony symfony4 symfony5
1个回答
0
投票

更好的解决方案是使用约束。

它已经存在UserPasswordConstraint

您可以将其直接添加到您的实体中。请小心声明a group for this constraint,否则您的用户创建现在将失败

    namespace App\Entity;

    use Symfony\Component\Security\Core\Validator\Constraints as SecurityAssert;

    class User
    {
        //...
        /**
         * @SecurityAssert\UserPassword(
         *     message = "Wrong value for your current password",
         *     groups = {"update"}
         * )
         */
        protected $password;
        //...
    }

但是我认为在更新用户实体时使用in the documentation这样的模型是一种较好的做法

© www.soinside.com 2019 - 2024. All rights reserved.