Сбросить пароль Symfony 4

Я пытаюсь создать пароль сброса для пользователей в Symfony 4, у меня есть эта ошибка

Не найден маршрут для "GET /change-password": метод не разрешен (разрешено: POST)

Я ищу помощь, пожалуйста

мой контроллер:

class ChangepasswordController extends Controller
{
private $oldpassword;
private $newpassword;

/**
 * @Route("/change-password", name="change_password", defaults={"email=null"})
 * @Method("POST")
 * @param Request $request
 * @param AuthenticationUtils $authenticationUtils
 * @param UserPasswordEncoderInterface $passwordEncoder
 * @param $email
 * @return Response
 */
public function ChangepasswordAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, $email)
{
    $user = new User();
    $form = $this->createForm(ChangepasswordType::class, $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        try {
            $user = $this->getDoctrine()->getRepository(User::class)->find($email);


        } catch (ExceptionInterface $e) {
            $this->addFlash('danger', "Cet email n'existe pas.");
        }

        //Recuperer le nouveau mot de passe tapé par l'utilisateur
        $newpassword = $passwordEncoder->encodePassword($user, $user->getPassword());
        //recuperer l'ancien mot de passe dans la base de donnéees
        $oldpassword = $user->getPassword();

        if ($newpassword = $oldpassword) {
            $this->addFlash('danger', "Ce mot de passe est dejà utilisé.");

        } else {
            $user->setPassword($newpassword);
        }

        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();

        $this->addFlash('success', 'votre mot de passe est bien  réinitialisé');

        # Redirection sur la page de connexion
        return $this->redirectToRoute('connexion');
    }
    return $this->render(
        'security/changemotdepasse.html.twig',
        array('form' => $form->createView())
    );

}

}

2 ответа

Вы должны изменить @Method("POST") на @Method({"GET","POST"}), потому что ваше действие предназначено для отображения и обработки формы.

Я думаю, что метод GET не является хорошим способом сброса пароля, вы можете добавить GET в аннотацию Methode, чтобы исправить это, но это плохой способ.

Хороший способ - просто отправить данные методом POST и обработать их в $request

@Route("/change-password", name="change_password"

Позаботьтесь о своем определении... -!== _

Другие вопросы по тегам