我的重置密码在 symfony 3 中不起作用

My reset password don't work in symfony 3

我编写了忘记密码的功能,直到现在一切正常,以至于我必须输入新密码并在尝试使用新密码登录时单击 save.But, 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()
    ]);

}

重置类型

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

谢谢

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

这里是对盐进行编码,而不是密码。这可能不是您想要做的。我猜你宁愿想要这样的行:

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