Symfony 3.4 не удаляет токен после использования - PullRequest
0 голосов
/ 29 декабря 2018

Эй, ребята, я работаю над функцией восстановления пароля.Пользователь нажимает на URL, полученный по почте, и предоставляет _password1 и _password2.Если они совпадают, это сохраняет его в базу данных.Проблема в том, что он не удаляет токен из базы данных ... Я попробовал несколько вещей, но не могу понять, как это правильно.У меня нет сообщений об ошибках.

Просто пропустите удаление.Я новичок в Symfony, и это моя первая попытка удаления. Lol

/**
 * @Route("/password-change")
 */
class ResettingController extends Controller
{

    /**
     * @Route("/{id}/{token}", name="resetting")
     * @param ResettingController $event
     */
    public function resetting(User $user, $token, Request $request)
    {

        // Find the token in the database
        $tokendb = $this->getDoctrine()
            ->getRepository('AppBundle\\Entity\\PasswordToken'::class)
            ->findOneBy(array('token'=>$token));

        //Redirect if token is not valid
        if ($token == "" || !$tokendb || $token!=$tokendb->getToken())
        {
            $request->getSession()->getFlashBag()->add('error', "Lien d'accès invalide");
            return $this->redirectToRoute('security_login');
        }

        // Building the form for the view
        $form = $this->createFormBuilder()
        ->add('_password1', PasswordType::class, array("label"=>"Entrez un nouveau mot de passe:"))
        ->add('_password2', PasswordType::class, array("label"=>"Retapez ce même mot de passe:"))
        ->getForm();
        $form->handleRequest($request);

        // When form is submited
        if($form->isSubmitted() && $form->isValid())
        {

            // Check if password 1 and 2 matches
            if( $request->request->get('form')['_password1'] && $request->request->get('form')['_password1'] == $request->request->get('form')['_password2'])
            {
                // Save the new password
                $user->setplainPassword( $request->request->get('form')['_password1'] );

                // Delete the token
                $em = $this->getDoctrine()->getEntityManager();
                $em->remove($tokendb);

                // success message and redirect
                $request->getSession()->getFlashBag()->add('success', "Votre mot de passe a été modifié.");
                return $this->redirectToRoute('security_login');
            }else{
                $request->getSession()->getFlashBag()->add('error', "Vos deux mot de passe ne correspondent pas.");
            }
        } 

        // Sending the view
        return $this->render('Security/change-password.html.twig', [
            'form' => $form->createView(),
            'title' => "Changement de mot de passe",
            'error' => $form->getErrors()
        ]);

    }
}

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Небольшое замечание:

Используйте RepeatedType вместо добавления двух полей в формуляр.Он сделал проверку соответствия автоматически

0 голосов
/ 29 декабря 2018

Вам необходимо добавить $em->flush(); после $em->remove($tokendb);, чтобы выполнить операцию в базе данных.

flush ()

Очищает все изменения объектов, поставленных в очередьдо настоящего времени в базу данных.

Эффективно синхронизирует состояние управляемых объектов в памяти с базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...