J'étais également coincé avec cela parce que la plupart du temps, les noms d'utilisateur sont des e-mails de nos jours, je peux comprendre le raisonnement d'un champ E-mail séparé. Ce ne sont que mes pensées / expériences car je n'ai pas non plus trouvé le mot de Microsoft à ce sujet.
Rappelez-vous, Asp Identity sert uniquement à identifier quelqu'un, vous n'avez pas besoin d'avoir un e-mail pour être identifié mais ils nous permettent de le stocker car il fait partie d'une identité. Lorsque vous créez un nouveau projet Web dans Visual Studio, vous avez la possibilité d'utiliser des options d'authentification.
Si vous sélectionnez un type de projet non vide tel que MVC et que vous définissez l'authentification sur "Comptes individuels", les bases de la gestion des utilisateurs vous sont fournies. L'une d'elles inclut une sous-classe ressemblant à ceci dans App_Start \ IdentityConfig.cs:
// Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
}
//N.B rest of code removed
}
Ce que cela nous dit, c'est que Microsoft a l'intention de stocker des noms d'utilisateurs plus complexes (reportez-vous à AllowOnlyAlphaNumericUserNames = false), donc nous avons vraiment des signaux mixtes.
Le fait que cela soit généré à partir d'un projet Web par défaut nous donne une bonne indication / direction de Microsoft (et une manière propre) pour nous permettre de saisir des e-mails dans le champ nom d'utilisateur. Il est propre car la méthode de création statique est utilisée dans App_Start \ Startup.Auth.cs lors du démarrage de l'application avec le contexte Microsoft.OWIN.
Le seul inconvénient de cette approche est que vous finissez par stocker le courrier électronique deux fois ... Ce qui n'est pas bon!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;