Ver Mensaje Individual
  #7 (permalink)  
Antiguo 22/09/2014, 18:06
nelson_nnn
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Resetear contraseña

Al final lo que hice fue esto ya que symfony tiene un validador de password

Creé un modelo para el formulario donde con la anotación valido que la contraseña exista.
Código PHP:
Ver original
  1. use Symfony\Component\Validator\Mapping\ClassMetadata;
  2. use Symfony\Component\Security\Core\Validator\Constraints as Assert;
  3.  
  4. class ChangePassword {
  5.    
  6.     /**
  7.      * @Assert\UserPassword( message = "Contraseña actual invalida" )
  8.      * @var type
  9.      */
  10.     protected $oldPassword;
  11.    
  12.    
  13.     protected $password;
  14.    
  15.    
  16.     public function getOldPassword(){
  17.         return $this->oldPassword;
  18.     }
  19.    
  20.     public function setOldPassword($oldPassword){
  21.          $this->oldPassword = $oldPassword;
  22.          return $this;
  23.     }
  24.    
  25.     public function getPassword(){
  26.         return $this->password;
  27.     }
  28.    
  29.     public function setPassword($password){
  30.          $this->password = $password;
  31.          return $this;
  32.     }
  33. }

el formType
Código PHP:
Ver original
  1. class ResetInsidePassType extends AbstractType{
  2.    
  3.     public function buildForm(FormBuilderInterface $builder, array $options) {
  4.         $builder->add('oldPassword', 'password')
  5.                 ->add('password', 'password');  //no he creado dos campos para validar la nueva password porque lo hago con javascript en el front
  6.     }
  7.    
  8.     public function setDefaultOptions(OptionsResolverInterface $resolver) {
  9.         $resolver->setDefaults(array('data_class' => 'Proyecto\UsuarioBundle\Form\Model\ChangePassword'));
  10.     }
  11.    
  12.     public function getName() {
  13.         return 'usuariotype';
  14.     }
  15. }

Y en el controlador valido que la contraseña actual sea la misma que está guardada:
Código PHP:
Ver original
  1. public function resetPassAction(){
  2.  
  3.         $request = $this->getRequest();
  4.         $changePassword = new ChangePassword();
  5.  
  6.         $formulario = $this->createForm(new ResetInsidePassType, $changePassword);
  7.  
  8.         $formulario->handleRequest($request);
  9.  
  10.         $oldPassword = $formulario->get('oldPassword');
  11.  
  12.         if($oldPassword->isValid()){
  13.               // aquí extraigo la contraseña nueva y persisto
  14.         }
  15.  
  16.         return $this->render('ProyectoUsuariosBundle:Default:reset-password.html.twig', array('formulario'=>$formulario->createView());
  17.     }

Bueno, dejo esta forma como lo resolví en mi caso particular, no sé si será la forma mas correcta pero me ha funcionado, se lo dejo para quien quiera hacer algo parecido.