Мой пароль сброса не работает в Symfony 3

Я кодирую функциональность забытого пароля, и до сих пор все работает, до такой степени, что мне нужно ввести новый пароль и нажать кнопку «Сохранить». Но когда я пытаюсь войти в систему с новым паролем, 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,
    ]);
}
}

Вид

 <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)}}

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

$password = $encoder->encodePassword($user, $user->getSalt());

Здесь вы кодируете соль, а не пароль. Вероятно, это не то, что вы хотите делать. Я думаю, вам бы хотелось, чтобы эта строка была такой:

$password = $encoder->encodePassword($user, $user->getPassword());

Я считаю, что вторым аргументом должен быть $user->getPlainPassword().

Iwan Wijaya 10.11.2018 04:11

@IwanWijaya, у меня нет getPlainPassword в моей сущности, у меня есть getPassword

Mohamed Sacko 12.11.2018 16:19

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