Confirmación contraseña en registro de Prestashop

publicado en: Prestashop, Tutoriales | 10

Para aquellos que estáis trabajando con Prestashop os habréis dado cuenta que a la hora que un usuario se registre en nuestra tienda simplemente se le pide una vez la contraseña para acceder a su cuenta en el formulario de registro. Esto aunque algo problemático tiene su explicación, el equipo de Prestashop siempre intenta simplificar al máximo todos los datos que tiene que introducir un cliente para «molestar» lo menos posible el proceso de compra.

Esto está muy bien pero hay muchos usuarios que cuando crean su contraseña no ponen especial atención a lo que están tecleando, con lo que luego no pueden acceder a su cuenta, aunque muchos penséis que esto realmente no es un problema ya que existe la opción de recuperar contraseña os diré que la mayoría de usuarios parecen tenerle miedo a esta opción o desconocer su funcionamiento, por lo que tenemos que intentar asegurar que la contraseña introducida es la correcta para evitar que tras un par de intentos de acceso acaben abandonando y comprando en la competencia.

Por suerte hacer esta modificación no nos llevará apenas tiempo y conseguiremos tener un segundo campo que compruebe que ambas contraseñas introducidas son iguales. La modificación la he probado en la versión 1.4.8.2, os debería funcionar sin problemas en todas las 1.4.x y posiblemente en la 1.5.x tampoco os debería dar problemas, vamos al lio.

 

Lo primero que tenemos que hacer es incluir el nuevo campo para la confirmación de la contraseña en themes/yourtheme/authentication.tpl
Una vez que hayais localizado ese archivo teneis que buscar las siguientes lineas:

<p>
<label for="passwd">{l s='Password'}</label>
<input type="password" name="passwd" id="passwd" />
<sup>*</sup>
<span>{l s='(5 characters min.)'}</span>
</p>

Justo después de ese trozo de código, que es el actual input donde se introduce la contraseña, debéis introducir lo siguiente

<p>
<label for="passwd_confirm">{l s='Confirm password'}</label>
<input type="password" name="passwd_confirm" id="passwd_confirm" />
<sup>*</sup>
</p>

Con esto ya tenemos creado el segundo input para poder introducir esa confirmación que vamos buscando.

Ahora debemos editar el controlador que gestiona todo esto para decirle que tenga en cuenta este segundo input que acabamos de crear, para ello nos vamos a /controllers/AuthController.php y buscamos la siguiente linea:

$_POST['firstname'] = $_POST['customer_firstname']

Debajo de esa línea de código deberemos introducir lo siguiente:

[Editado#Octubre 2013] Gracias al comentario de Aner se ha detectado un fallo derivado de esta modificación. Una vez se siguen los pasos si activamos los pedidos como invitados en nuestra tienda online lo que obtenemos es un error en el proceso, nos dirá que las contraseñas no coinciden, ¡pero nosotros no hemos introducido ninguna! Para solucionar esto hemos hecho una pequeña modificación en nuestro código que hace que no se compruebe la contraseña si se trata de una compra como invitado. Aquí tenéis ya la modificación aplicada.

if (!Tools::isSubmit('submitGuestAccount') && Tools::getValue('passwd') != Tools::getValue('passwd_confirm'))
    $this->errors[] = Tools::displayError('Passwords do not match');

 Listo! Ya tenemos nuestro segundo campo que comprobará y avisará al usuario de la igualdad o no de la contraseña que ha escogido.

Espero que os haya sido de ayuda y ayude así a bajar la tasa  de abandono de vuestra tienda.

Ya sabéis que me encantan vuestros comentarios así que espero ver que os ha parecido!

 

[ACTUALIZADO PRESTASHOP 1.6]

Gracias al comentario de sakura se ha conseguido adaptar esta guía para que sea compatible con la versión 1.6 de Prestashop. En el paso que retocamos el AuthController.php debemos hacer esta modificación

 

En el AuthController.php, después de la linea donde valida el email en la función processSubmitAccount() añadir

// Check if password matches confirmation
if (Tools::getValue(‘passwd’) != Tools::getValue(‘confirm_passwd’))
$this->errors[] = Tools::displayError(‘Password confirmation does not match password !’, false);

Como bien apunta además no debéis olvidar traducir los errores

10 comentarios

  1. Aner

    Gracias por el artículo. Me ha servido de bastante. Pero me ha acarreado un problema indirecto. Ahora cuando el cliente quiere realizar un pedido instantáneo sale el error de que las contraseñas no coinciden (paswords do not match). ¿Hay alguna forma de que esa obligatoriedad de introducir correctamente la doble contraseña no afecte a quien realiza la compra instantanea?
    Gracias de nuevo

    • dwalins

      Hola Aner, por pedido instantáneo te refieres al tipo simplificado en un paso o al pedido como invitado? La verdad que nunca se me habían dado estas características juntas, así que a ver que podemos hacer!
      Por cierto, ¿que versión de prestashop estás utilizando?

  2. Aner

    Hola Dawlins
    Me refiero al pedido como invitado. Estoy utilizando la versión 1.4.10.

    • dwalins

      Hola Aner, ya he podido solucionar el problema. Si te fijas en la linea 64 vemos que hace una comprobación

      if (Tools::isSubmit('submitAccount') OR Tools::isSubmit('submitGuestAccount'))
      

      Esto sucede cada vez que se crea una cuenta, tanto una normal como una de invitado, pero en nuestro caso no nos interesa que haga la comprobación de la contraseña si la cuenta que se crea es de invitado, pero si queremos que siga haciendo todo lo demás. Por lo tanto debemos añadir una condición más donde se comprueba la contraseña, de modo que este trozo:

      if (Tools::getValue('passwd') != Tools::getValue('passwd_confirm'))
      $this->errors[] = Tools::displayError('Passwords do not match');
      

      Quede de esta forma:

      			if (!Tools::isSubmit('submitGuestAccount') && Tools::getValue('passwd') != Tools::getValue('passwd_confirm'))
      				$this->errors[] = Tools::displayError('Passwords do not match');
      

      Con esto lo que hacemos es que no se ejecute esa comprobación cuando la creación de cuenta que se está realizando es de tipo invitado. Pruébalo y nos cuentas que tal te va con esta solución.

      Un saludo!

  3. Carlos

    Hola:
    Muy claras las explicaciones, muy buen trabajo. Mi pregunta es: ¿Funciona en Prestashop 1.6 o tienes un instructivo para esta versión?

    • dwalins

      Hola Carlos,

      Es una publicación bastante antigua, de 2013. No está probado con la versión 1.6, seguramente haya cosas que estén cambiadas de sitio pero el concepto general es el mismo, si tienes soltura seguro que no te cuesta adaptarlo a la nueva versión. Por mi parte voy a probarlo también para darte una respuesta mas clara.

      Si lo pruebas antes que yo te agradecería tus comentarios al respecto para ver como darle solución.

      Un saludo

  4. Sakura

    Buenas tardes,
    Yo lo acabo de probar en prestashop 1.6.1.0 y hace la validación perfectamente pero aun así realiza el envío del formulario y por tanto el alta del usuario. Intentaré encontrar la solución pero cualquier ayuda sería bienvenida.
    Muchas gracias por la ayuda 🙂

    • Sakura

      Bueno pues ahí esta:
      En el AuthController.php, después de la linea donde valida el email en la función processSubmitAccount() añadir

      // Check if password matches confirmation
      if (Tools::getValue(‘passwd’) != Tools::getValue(‘confirm_passwd’))
      $this->errors[] = Tools::displayError(‘Password confirmation does not match password !’, false);

      Luego no olvidar traducir los errores. Por cierto he encontrado que además de incluir la caja de confirmación en autentication.tpl hay que hacerlo en order-opc-new-account.tpl para aquellos que utilizamos el checkout en una pagina no he probado el problema con el pedido como invitado, quizá habría que añadir la condición como en el ejemplo anterior, esto funciona por lo menos para la creación de cuentas.

      Espero que sea de ayuda 🙂

      Saludos

    • dwalins

      Hola Sakura,

      Parece que tu solución es correcta, me pillas volviendo del Prestashop Day, en cuanto pueda lo pruebo y si te parece bien actualizo para ponerlo a disposición de todos

      Un saludo y muchas gracias por tu colaboración, con gestos como este es cono se consigue una herramienta útil para todos.

      Un saludo

Responder a Aner Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *