Я кодирую функционал забытого пароля, и до сих пор все работает, до того момента, когда мне нужно ввести новый пароль и нажать «Сохранить». Но когда я пытаюсь войти в систему с новым паролем, symfony показывает мне плохие полномочия. И я больше не могу войти со старым паролем тоже.
Контроллер
public function resettingAction(User $user, $token, Request $request)
{
if ($user->getToken() === null || $token !== $user->getToken() || !$this->isRequestInTime($user->getPasswordRequestedAt()))
{
throw new AccessDeniedHttpException();
}
$form = $this->createForm(ResettingType::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
$encoder = $this->container->get('security.password_encoder');
$password = $encoder->encodePassword($user, $user->getSalt());
$user->setPassword($password);
$user->setToken(null);
$user->setPasswordRequestedAt(null);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
$request->getSession()->getFlashBag()->add('success', "Votre mot de passe a été renouvelé.");
return $this->redirectToRoute('login');
}
return $this->render('Resetting/index.html.twig', [
'form' => $form->createView()
]);
}
ResettingType
class ResettingType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('password', RepeatedType::class, array(
'type' => PasswordType::class,
'first_options' => array('label' => 'Nouveau mot de passe'),
'second_options' => array('label' => 'Confirmer le mot de passe'),
'invalid_message' => 'Les 2 mots de passe ne sont pas identiques.',
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
// uncomment if you want to bind to a class
'data_class' => User::class,
]);
}
}
View
<h1>Renouvellement du mot de passe</h1>
{{form_start(form)}}
{{form_row(form.password.first)}}
{{form_row(form.password.second)}}
<button class="" type="submit">Envoyer</button>
{{form_end(form)}}
Спасибо