web-dev-qa-db-fra.com

NormalizedUserName VS Username dans DotNet Core

J'essaie de créer une implémentation personnalisée de IUserLoginStore pour MongoDB et j'ai remarqué lors de l'utilisation

UserManager<ApplicationUser>

avec la méthode

 var userResult = await _userManager.CreateAsync(user);

il passe par la mise en œuvre de

GetUserNameAsync
FindByNameAsync
SetNormalizedUserNameAsync
GetUserIdAsync

Je voudrais clarifier deux questions:

  • quel est le but d'avoir un nom d'utilisateur normalisé et un nom d'utilisateur? la seule différence que j'ai pu remarquer id que le normalizedUserName est en majuscules.

  • J'utilise mon implémentation uniquement pour stocker des utilisateurs à partir d'une connexion externe (Google plus), existe-t-il un moyen de supprimer le nom d'utilisateur et NormilizedUserName car, fondamentalement, j'utilise l'e-mail dans ces trois champs, j'ai l'impression que je suis en train de dupliquer des données et cela n'a aucun sens pour moi.

des recommandations?

22
jack.the.ripper

1) La normalisation empêche les personnes d'enregistrer des noms d'utilisateur qui ne diffèrent que par la casse des lettres.

2) Non - ces champs font partie du modèle de données de base.

19
blowdart
  1. Oui, vous pouvez (si vous le voulez vraiment):
    1. FindByNameAsync doit rechercher par u.Name insensible à la casse (faites-vous confiance à vos paramètres de base de données?)
    2. GetNormalizedUserNameAsync devrait retourner user.Name.ToUpperCase ()
    3. SetNormalizedUserNameAsync ne devrait rien faire

Veuillez noter que 2.1 peut ignorer n'importe quel index sur la colonne name dans la base de données et nuire aux performances de votre application (vérifiez à nouveau votre base de données). Ou provoquer l'exécution "côté client" (et encore une fois, nuire considérablement aux performances). Selon votre implémentation.

J'utilise une telle classe "minimisée" User uniquement dans les systèmes d'entreprise internes qui utilisent uniquement un fournisseur spécifique OAuth et n'acceptant des utilisateurs que du domaine spécifié (Google Apps). Ce système ne fonctionne pas toute recherche par nom d'utilisateur et je lance en toute sécurité NotImplementedException dans de nombreuses méthodes.

17
Dmitry