Aller au contenu principal

Guide d’implémentation d’un champ de mot de passe accessible

Introduction​

Les champs de mot de passe sont essentiels pour la sécurité des utilisateurs. Assurer leur accessibilité garantit que tous les utilisateurs, y compris ceux utilisant des technologies d’assistance, peuvent interagir avec ces champs de manière efficace et sécurisée.

Description technique​

Structure HTML accessible​

La structure HTML doit être sémantique et inclure des attributs ARIA pour une meilleure compréhension par les technologies d’assistance.

  • Étiquette (<label>) : Associée au champ de saisie pour indiquer son objectif.
  • Champ de saisie (<input type="password">) : Utilisé pour la saisie du mot de passe.
  • Bouton de visibilité (<button>) : Permet de basculer la visibilité du mot de passe.
  • Attributs ARIA et propriétés :
    • aria-label sur le bouton pour indiquer son action, par exemple, "Afficher le mot de passe" ou "Masquer le mot de passe".
    • aria-live="polite" sur un élément contenant des messages d'erreur ou d'information pour informer les utilisateurs des changements.

Comportement javascript accessible​

  • Gestion de la visibilité du mot de passe : Le bouton doit permettre de basculer entre les modes texte et mot de passe, en mettant à jour l'attribut type du champ de saisie.
  • Mise à jour des attributs ARIA : Mettre à jour dynamiquement le aria-label du bouton en fonction de l'état actuel (affiché ou masqué).
  • Validation en Temps Réel : Fournir des retours immédiats sur la validité du mot de passe sans perturber l'utilisateur.

Bonnes pratiques d’accessibilité​

  • Respect des standards :
    • Suivre les directives WCAG 2.1, notamment le critère 1.3.1 sur l'information et les relations.
  • Messages visuels et auditifs :
    • Utiliser des messages d'erreur clairs et concis, visibles et audibles pour les technologies d’assistance.
  • Compatibilité multi-appareils :
    • Tester le champ de mot de passe sur différents appareils et navigateurs pour garantir une expérience uniforme.

Recommandations supplémentaires​

  • Amélioration de l'expérience utilisateur :
    • Ajouter des indications sur les critères de complexité du mot de passe requis.
    • Fournir une option pour générer un mot de passe sécurisé automatiquement.

Exemple de code accessible​

<form>
<label for="password">Mot de passe</label>
<input type="password" id="password" name="password" aria-describedby="passwordHelp" />
<button type="button" id="togglePassword" aria-label="Afficher le mot de passe">👁️</button>
<div id="passwordHelp" aria-live="polite">Votre mot de passe doit contenir au moins 8 caractères.</div>
<div id="error-message" style="color: red; display: none;" aria-live="assertive"></div>
<button type="submit">Soumettre</button>
</form>

<script>
const passwordInput = document.getElementById('password');
const togglePasswordButton = document.getElementById('togglePassword');
const errorMessage = document.getElementById('error-message');

// Gestion de la visibilité du mot de passe
togglePasswordButton.addEventListener('click', () => {
const type = passwordInput.getAttribute('type') === 'password' ? 'text' : 'password';
passwordInput.setAttribute('type', type);
const label =
togglePasswordButton.getAttribute('aria-label') === 'Afficher le mot de passe'
? 'Masquer le mot de passe'
: 'Afficher le mot de passe';
togglePasswordButton.setAttribute('aria-label', label);
});

// Validation du mot de passe en temps réel
passwordInput.addEventListener('input', () => {
if (passwordInput.value.length < 8) {
errorMessage.style.display = 'block';
errorMessage.textContent = 'Le mot de passe doit contenir au moins 8 caractères.';
} else {
errorMessage.style.display = 'none';
errorMessage.textContent = '';
}
});
</script>