Eu também fiquei preso a isso, porque na maioria das vezes os nomes de usuário são emails hoje em dia, embora eu possa entender o raciocínio de um campo de email separado. Estes são puramente meus pensamentos / experiências, pois também não consegui encontrar a opinião da Microsoft sobre isso.
Lembre-se, o Asp Identity é apenas para identificar alguém, você não precisa ter um E-mail para ser identificado, mas eles nos permitem armazená-lo porque faz parte de uma identidade. Ao criar um novo projeto da web no visual studio, você tem a opção de opções de autenticação.
Se você selecionar um tipo de projeto não vazio, como MVC, e configurar a autenticação como "Contas individuais", receberá os fundamentos básicos para o gerenciamento de usuários. Uma delas inclui uma subclasse semelhante a esta em 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
}
O que isso nos diz é que a Microsoft pretende armazenar nomes de usuário mais complexos (consulte AllowOnlyAlphaNumericUserNames = false); portanto, realmente temos sinais mistos.
O fato de isso ser gerado a partir de um projeto da web padrão nos fornece uma boa indicação / orientação da Microsoft (e de uma maneira limpa) para permitir a inserção de emails no campo nome do usuário. É limpo porque o método de criação estático é usado dentro do App_Start \ Startup.Auth.cs ao inicializar o aplicativo com o contexto Microsoft.OWIN.
A única desvantagem dessa abordagem é que você acaba armazenando o email duas vezes ... O que não é bom!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;