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?
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.
FindByNameAsync
doit rechercher par u.Name insensible à la casse (faites-vous confiance à vos paramètres de base de données?)GetNormalizedUserNameAsync
devrait retourner user.Name.ToUpperCase ()SetNormalizedUserNameAsync
ne devrait rien faireVeuillez 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.