Hachage des mots de passe dans Symfony : hacher, stocker, vérifier

Le hachage des mots de passe dans Symfony : on ne stocke jamais le mot de passe, seulement son empreinte, calculée et vérifiée par le PasswordHasher.

class Employe implements UserInterface, PasswordAuthenticatedUserInterface
{
    #[ORM\Column]
    private ?string $password = null; // le hash, jamais le mot de passe
}

// Dans ProfilController, une fois le formulaire valide :
$employe->setPassword($hasher->hashPassword($employe, $form->get('nouveau')->getData()));
$entityManager->flush();

L'algorithme se choisit dans security.yaml, sous password_hashers ; avec auto, Symfony prend bcrypt ou argon2. UserPasswordHasherInterface fournit hashPassword(), et la console security:hash-password calcule un hash à coller dans la configuration. À la connexion, c'est le pare-feu qui vérifie. Ailleurs, la contrainte UserPassword contrôle le mot de passe actuel dans un formulaire. Le piège : hacher à nouveau une saisie et la comparer au hash stocké avec ===. Le sel change à chaque appel, la comparaison échoue toujours ; on passe par isPasswordValid() ou par la contrainte. Et quand le hash change en base, Symfony ferme les autres sessions ouvertes avec l'ancien mot de passe.

Les exercices font de l'entité Employe un utilisateur Symfony, chargé en base par son email, dont la commande d'embauche hache les mots de passe, puis construisent le formulaire de changement de mot de passe : ancien mot de passe vérifié, nouveau saisi deux fois et haché avant d'être enregistré.

2 exercices font travailler cette notion, en écrivant du code dans le navigateur.

Dans les parcours