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

Publicada el

21 de octubre de 2019

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.