Как лучше всего реализовать смену пароля функциональность в Symfony2? Прямо сейчас я использую это:
$builder->add('password', 'repeated', array(
'first_name' => 'New password',
'second_name' => 'Confirm new password',
'type' => 'password'
));
Он также должен содержать проверку текущего пароля по соображениям безопасности.
Примечание : я не использую FOSUserBundle
.
Вам нужно либо создать другую модель с двумя полями:
Или добавьте непостоянное свойство к вашей пользовательской модели, как это делает FOSUserBundle (см. Свойство plainPassword
).
Таким образом, после того, как вы проверили действительный и новый пароль, действительный, вы кодируете новый пароль и заменяете старый.
Я использую действие от моего контроллера:
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(
));
}