【问题标题】:My reset password don't work in symfony 3我的重置密码在 symfony 3 中不起作用
【发布时间】:2018-11-08 16:32:21
【问题描述】:

我对忘记密码的功能进行了编码,直到现在一切正常,直到我必须输入新密码并单击保存。但是当我尝试使用新密码登录时,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)}}

谢谢

【问题讨论】:

    标签: symfony reset-password


    【解决方案1】:

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

    在这里您正在编码盐,但不是密码。这可能不是你想要做的。我猜你宁愿想要这样的那一行:

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

    【讨论】:

    • 我认为第二个参数应该是$user-&gt;getPlainPassword()
    • @IwanWijaya,我的实体中没有 getPlainPassword,我有 getPassword
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2015-08-26
    • 2019-01-28
    • 2015-08-25
    • 2014-12-22
    相关资源
    最近更新 更多