Foros del Web » Programando para Internet » PHP » Symfony »

Resetear contraseña

Estas en el tema de Resetear contraseña en el foro de Symfony en Foros del Web. Gente tengo una duda con un formulario para hacer un reseteo de contraseña, el formulario consta de 3 campos, uno para ingresar contraseña actual a ...
  #1 (permalink)  
Antiguo 21/09/2014, 00:50
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 10 años, 6 meses
Puntos: 0
Resetear contraseña

Gente tengo una duda con un formulario para hacer un reseteo de contraseña, el formulario consta de 3 campos, uno para ingresar contraseña actual a modo de validación y luego los otros dos para ingresar contraseña nueva y repetirla (para segunda validación), de estar investigando la manera de acceder a la contraseña guardada en la base de datos se complica ya que está encriptada y es imposible desencriptar, estuve fijandome en el código de FOSUserBundle y chequeando en el controlador, siguiendo las rutas de como se generan las instancias para crear un nuevo usuario veo que en la Entity User tiene una propiedad $plainPassword que no persiste y se rellena cuando el usuario hace login, luego cuando se requiere resetear la contraseña solamente se comparan los datos de $plainPassword y el dato que ingresa el usuario en el formulario de reseteo de contraseña, mi duda es si esta sería una forma correcta de implementar esa validación????
  #2 (permalink)  
Antiguo 21/09/2014, 11:13
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Resetear contraseña

Si es una de las formas de hacerlo, solo recuerda implementar el método eraseCredentials() de la interfaz UserInterface o AdvancedUserInterface dependiendo de cual implementaste.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 21/09/2014, 11:32
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Resetear contraseña

Cual es la funcion de ese metodo: eraseCredentials() ????
  #4 (permalink)  
Antiguo 21/09/2014, 11:35
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Resetear contraseña

Implementaste tu el login ? o estas usando FOSUserBundle ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 21/09/2014, 11:40
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Resetear contraseña

No, no voy a usar FOSUserBundle, voy a intentar crear un formulario de reseteo de contraseña usando la entidad usuario y tengo implementada la interfaz AdvancedUserInterface. Intentaré hacer algo parecido a como lo implementa ese bundle que es lo que me había interesado cuando lo revisé, el metodo eraseCredentials() sería para limpiar la propiedad $plainPassword no?
  #6 (permalink)  
Antiguo 21/09/2014, 12:29
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Resetear contraseña

Cita:
No, no voy a usar FOSUserBundle, voy a intentar crear un formulario de reseteo de contraseña usando la entidad usuario y tengo implementada la interfaz AdvancedUserInterface. Intentaré hacer algo parecido a como lo implementa ese bundle que es lo que me había interesado cuando lo revisé, el metodo eraseCredentials() sería para limpiar la propiedad $plainPassword no?
Es correcto
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 22/09/2014, 18:06
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 10 años, 6 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.

Etiquetas: contraseña, resetear
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:49.