createFormBuilder(null, [ 'action' => $this->generateUrl('app_reset_password'), ]) ->add('email', EmailType::class, [ 'label' => 'E-Mail', 'constraints' => [ new NotBlank([ 'message' => 'Bitte angeben', ]), new Email([ 'mode' => 'strict', 'message' => 'Bitte eine gültige E-Mail Adresse angeben', ]), ], ]) ->getForm() ; $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $email = (string) $form->get('email')->getData(); if (false === $this->publicFormRateLimiter->isPasswordResetAllowed($email, $request)) { $this->addFlash('error', PublicFormRateLimiter::THROTTLED_MESSAGE); return $this->render('reset_password/index.html.twig', [ 'form' => $form, ], new Response('', Response::HTTP_TOO_MANY_REQUESTS)); } $this->passwordResetManager->requestPasswordReset($email); $this->addFlash('info', 'Du erhältst in Kürze eine E-Mail mit einem Link zum Zurücksetzen deines Passworts, sofern zu deinem Konto eine E-Mail-Adresse hinterlegt ist.'); return $this->redirectToRoute('app_login'); } return $this->render('reset_password/index.html.twig', [ 'form' => $form, ]); } #[Route('/reset-password/confirm', name: 'app_reset_password_confirm', methods: ['GET', 'POST'])] #[IsGranted('PUBLIC_ACCESS')] public function confirm(Request $request): Response { $user = $this->passwordResetManager->validateResetRequest($request); $form = $this ->createFormBuilder(null, [ 'action' => $request->getUri(), ]) ->add('password', RepeatedType::class, [ 'type' => PasswordType::class, 'first_options' => [ 'label' => 'Neues Passwort', 'constraints' => [ new Length( min: 8, minMessage: 'Das Passwort muss mindestens {{ limit }} Zeichen lang sein.', ), ], ], 'second_options' => [ 'label' => 'Neues Passwort wiederholen', ], 'invalid_message' => 'Die beiden Passwortangaben müssen identisch sein.', ]) ->getForm() ; $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $this->passwordResetManager->resetPassword($user, $form->get('password')->getData()); $this->addFlash('info', 'Dein Passwort wurde aktualisiert. Du kannst dich jetzt mit dem neuen Passwort anmelden.'); return $this->redirectToRoute('app_login'); } return $this->render('reset_password/confirm.html.twig', [ 'form' => $form, ]); } }