Symfony2: UserPassword Constraint

Este constraint está disponible sólo a partir de la versión 2.1 y se usa para, por ejemplo, dar la posibilidad a nuestros usuarios de que se cambien la contraseña. Esto nos permitirá de una forma muy sencilla validar la contraseña actual del usuario autenticado.

Por la descripción invita a usarlo para validar un formulario de login, pero en la documentación indica claramente que no se debe usar para esto, ya que existe el sistema de seguridad que lo hará automáticamente.

Lo interesante es que valida la contraseña del usuario que está autenticado, para probarlo se podría crear un atributo en nuestra clase User llamado $oldPassword y añadirle la anotación:

Pero en nuestro caso vamos a añadir el constraint directamente en el formulario por ver otra forma de hacerlo:

El data_class que hemos indicado es la implementación de usuario que usa Symfony para usuarios en memoria (lo normal es indicar nuestra clase que usamos para el usuario), también hemos añadido mapped => false porque la clase User es final, si fuera nuestra implementación esto sobraría.

Para la demo nos “loguearemos” a mano, es decir, por programación (en inglés queda mejor, programmatically), para ello nos creamos un método en el controller que recibe un username, un password y roles y automáticamente loguea ese usuario.

ACTUALIZACIÓN: en lugar de crear el usuario, vamos a usar los que están en memoria, por lo que con sólo el username obtendremos el usuario, en el siguiente artículo explicaremos un poco más esta parte.

La contraseña para la demo es smtcpass.

Ver Demo