Мой пароль сброса не работает в Symfony 3 - PullRequest
0 голосов
/ 08 ноября 2018

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

Спасибо

1 Ответ

0 голосов
/ 08 ноября 2018

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

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

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