Реализовать смену пароля в Symfony2

Как лучше всего реализовать смену пароля функциональность в Symfony2? Прямо сейчас я использую это:

$builder->add('password', 'repeated', array(
    'first_name' => 'New password',
    'second_name' => 'Confirm new password',
    'type' => 'password'
));

Он также должен содержать проверку текущего пароля по соображениям безопасности.

Примечание : я не использую FOSUserBundle .

24
задан Sam Bellerose 20 July 2018 в 16:05
поделиться

2 ответа

Вам нужно либо создать другую модель с двумя полями:

  • одно для текущего пароля;
  • и другое для нового.

Или добавьте непостоянное свойство к вашей пользовательской модели, как это делает FOSUserBundle (см. Свойство plainPassword).

Таким образом, после того, как вы проверили действительный и новый пароль, действительный, вы кодируете новый пароль и заменяете старый.

8
ответ дан 28 November 2019 в 22:33
поделиться

Я использую действие от моего контроллера:

public function changepasswordAction(Request $request) {
    $session = $request->getSession();

    if($request->getMethod() == 'POST') {
        $old_pwd = $request->get('old_password');
        $new_pwd = $request->get('new_password');
        $user = $this->getUser();
        $encoder = $this->container->get('security.encoder_factory')->getEncoder($user);
        $old_pwd_encoded = $encoder->encodePassword($old_pwd, $user->getSalt());

        if($user->getPassword() != $old_pwd_encoded) {
            $session->getFlashBag()->set('error_msg', "Wrong old password!");
        } else {
            $new_pwd_encoded = $encoder->encodePassword($new_pwd, $user->getSalt());
            $user->setPassword($new_pwd_encoded);
            $manager = $this->getDoctrine()->getManager();
            $manager->persist($user);

            $manager->flush();
            $session->getFlashBag()->set('success_msg', "Password change successfully!");
        }
        return $this->render('@adminlte/profile/change_password.html.twig');
    }

    return $this->render('@adminlte/profile/change_password.html.twig', array(

    ));
}
4
ответ дан 28 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: