Pipin a affiché les mots de passe de tout le monde sur le tableau des commandes, « pour ne pas les oublier ». Il est urgent de changer les serrures : chaque employé doit pouvoir changer son mot de passe.
Votre mission
- Complétez
ChangementMotDePasseType, un formulaire qui ne remplit aucune entité :ancien: le mot de passe actuel, vérifié (« Ce n'est pas votre mot de passe actuel. ») ;nouveau: saisi deux fois (« Les deux saisies ne correspondent pas. »), obligatoire, 8 caractères au moins (« Au moins 8 caractères. »).
- Dans
ProfilController::changerMotDePasse()(page/profil/mot-de-passe) :- réservez la page aux employés connectés ;
- si le formulaire est valide : hachez le nouveau mot de passe, enregistrez-le, ajoutez le message flash « Mot de passe changé. », puis redirigez vers l'accueil.
Pour essayer dans l'aperçu : connectez-vous avec bruna@dragon-ivre.fr / marmite, puis suivez le lien « Mon mot de passe ».
Et ceux qui ont lu le tableau ?
À chaque requête, le pare-feu recharge l'employé depuis la base et le compare à celui gardé en session. Si le mot de passe diffère, le compte a peut-être été compromis : la session est fermée. Toutes les sessions ouvertes avec l'ancien mot de passe sont donc déconnectées dès le changement, sauf la vôtre : elle a enregistré le nouveau hash en fin de requête. Symfony s'en charge seul, et les tests le vérifient.
Rappel
Symfony fournit la contrainte UserPassword, pour vérifier le mot de passe actuel, et le type RepeatedType, pour la double saisie. Ne comparez jamais des mots de passe vous-même.