Nuevo en Symfony 4.4: Migración de contraseñas
En Symfony 4.3, añadimos un codificador nativo de contraseñas que genera el hash de las contraseñas utilizando el mejor algoritmo posible de entre todos los disponibles en tu servidor:
# config/packages/security.yaml security: # ... encoders: App\Entity\User: algorithm: auto cost: 14
El algoritmo se selecciona automáticamente, así que puede cambiar con el tiempo. Esto significa que diferentes usuarios de tu aplicación pueden estar usando diferentes algoritmos. Técnicamente esto no es ningún problema porque Symfony sabe cómo calcular el hash usando cualquier algoritmo, así que todos los usuarios podrán loguearse en la aplicación sin problemas. No obstante, sería genial si todos los usuarios pudieran utilizar siempre el mejor algoritmo posible.
En Symfony 4.4, cuando un usuario se autentica correctamente, Symfony comprueba si el hash de su contraseña está utilizando el mejor algoritmo posible. Si no es así, Symfony genera el nuevo hash y te lo pasa para que puedas guardarlo.
En la práctica, is utilizas el proveedor de usuarios entity para almacenar
los usuarios en una base de datos mediante Doctrine, solo tienes que actualizar
el repositorio de Doctrine asociado para implementar la interfaz
Symfony\\Component\\Security\\Core\\User\\PasswordUpgraderInterface
.
Esta interfaz define un único método llamado upgradePassword()
que Symfony
invoca cuando hay que actualizar el hash:
// src/Repository/UserRepository.php namespace App\Repository; // ... use Symfony\Component\Security\Core\User\PasswordUpgraderInterface; class UserRepository extends EntityRepository implements PasswordUpgraderInterface { // ... public function upgradePassword(UserInterface $user, string $newEncodedPassword): void { // este código es solo un ejemplo; el código exacto dependerá de tu aplicación $user->setPassword($newEncodedPassword); $this->getEntityManager()->flush($user); } }
Lee la documentación de esta nueva funcionalidad para aprender cómo implementarla cuando se usa un proveedor de usuarios propio o un codificador de contraseñas personalizado.
Esta funcionalidad fue contribuida por Nicolas Grekas en los pull requests #31594, #31597 y #31843.
Fuente: New in Symfony 4.4: Password Migrations
Comentarios
Proyectos Symfony destacados
La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.