Files
geo/api/docs/USERNAME_VALIDATION_CHANGES.md
Pierre 0687900564 fix: Récupérer l'opération active depuis la table operations
- Corrige l'erreur SQL 'Unknown column fk_operation in users'
- L'opération active est récupérée depuis operations.chk_active = 1
- Jointure avec users pour filtrer par entité de l'admin créateur
- Query: SELECT o.id FROM operations o INNER JOIN users u ON u.fk_entite = o.fk_entite WHERE u.id = ? AND o.chk_active = 1
2026-01-26 16:57:08 +01:00

4.4 KiB
Executable File

Changements de validation des usernames - Version ultra-souple

Date : 17 janvier 2025

Contexte

Suite aux problèmes d'erreurs 400 et au besoin d'avoir une approche plus moderne et inclusive, les règles de validation des usernames ont été assouplies pour accepter tous les caractères UTF-8, similaire à l'approche NIST pour les mots de passe.

Anciennes règles (trop restrictives)

  • 10-30 caractères
  • Doit commencer par une lettre minuscule
  • Seulement : a-z, 0-9, ., -, _
  • Pas d'espaces
  • Pas de majuscules
  • Pas d'accents ou caractères spéciaux

Nouvelles règles (ultra-souples)

  • 8-30 caractères UTF-8
  • Tous caractères acceptés :
    • Lettres (majuscules/minuscules)
    • Chiffres
    • Espaces
    • Caractères spéciaux (!@#$%^&*()_+-=[]{}|;:'"<>,.?/)
    • Accents (é, è, à, ñ, ü, etc.)
    • Émojis (😀, 🎉, ❤️, etc.)
    • Caractères non-latins (中文, العربية, Русский, etc.)
  • Sensible à la casse (Jean ≠ jean)
  • Trim automatique des espaces début/fin
  • Unicité vérifiée dans toute la base

Exemples de usernames valides

Noms classiques

  • Jean-Pierre
  • Marie Claire (avec espace)
  • O'Connor
  • José García

Avec chiffres et caractères spéciaux

  • admin2024
  • user@company
  • test_user#1
  • Marie*123!

International

  • 李明 (chinois)
  • محمد (arabe)
  • Владимир (russe)
  • さくら (japonais)
  • Παύλος (grec)

Modernes/Fun

  • 🦄Unicorn
  • Player_1 🎮
  • ☕Coffee.Lover
  • 2024_User

Exemples de usernames invalides

  • short (moins de 8 caractères)
  • (espaces seulement)
  • very_long_username_that_exceeds_thirty_chars (plus de 30 caractères)

Modifications techniques

1. Code PHP (UserController.php)

// Avant (restrictif)
if (!preg_match('/^[a-z][a-z0-9._-]{9,29}$/', $username))

// Après (ultra-souple)
$username = trim($data['username']);
$usernameLength = mb_strlen($username, 'UTF-8');

if ($usernameLength < 8) {
    // Erreur : trop court
}
if ($usernameLength > 30) {
    // Erreur : trop long
}
// C'est tout ! Pas d'autre validation

2. Base de données

-- Script à exécuter : scripts/sql/migration_username_utf8_support.sql
ALTER TABLE `users` 
MODIFY COLUMN `encrypted_user_name` varchar(255) DEFAULT '';

3. Messages d'erreur simplifiés

  • Avant : "Format du nom d'utilisateur invalide (10-30 caractères, commence par une lettre, caractères autorisés: a-z, 0-9, ., -, _)"
  • Après :
    • "Identifiant trop court" + "Minimum 8 caractères"
    • "Identifiant trop long" + "Maximum 30 caractères"
    • "Identifiant déjà utilisé"

Impact sur l'expérience utilisateur

Avantages

  1. Inclusivité : Support de toutes les langues et cultures
  2. Modernité : Permet les émojis et caractères spéciaux
  3. Simplicité : Règles faciles à comprendre (juste la longueur)
  4. Flexibilité : Les utilisateurs peuvent choisir l'identifiant qu'ils veulent
  5. Moins d'erreurs : Moins de rejets pour format invalide

Points d'attention

  1. Support client : Former le support aux nouveaux formats possibles
  2. Affichage : S'assurer que l'UI supporte bien l'UTF-8
  3. Recherche : La recherche d'utilisateurs doit gérer la casse et l'UTF-8
  4. Export : Vérifier que les exports CSV/Excel gèrent bien l'UTF-8

Sécurité

Pas d'impact sur la sécurité

  • Les usernames sont toujours chiffrés en base (AES-256-CBC)
  • L'unicité est toujours vérifiée
  • Les injections SQL sont impossibles (prepared statements)
  • Le trim empêche les espaces invisibles

Recommandations

  • Continuer à générer automatiquement des usernames simples (ASCII) pour éviter les problèmes
  • Mais permettre la saisie manuelle de tout format
  • Logger les usernames "exotiques" pour détecter d'éventuels abus

Tests

  • Script de test disponible : /tests/test_username_validation.php
  • Teste tous les cas limites et formats internationaux

Rollback si nécessaire

Si besoin de revenir en arrière :

  1. Restaurer l'ancienne validation dans UserController
  2. Les usernames UTF-8 existants continueront de fonctionner
  3. Seuls les nouveaux seront restreints

Conclusion

Cette approche ultra-souple aligne les usernames sur les standards modernes d'inclusivité et d'accessibilité, tout en maintenant la sécurité grâce au chiffrement et à la validation de l'unicité.