También me quedé atascado con esto porque la mayoría de las veces los nombres de usuario son correos electrónicos en estos días, aunque puedo entender el razonamiento de un campo de correo electrónico separado. Estos son puramente mis pensamientos / experiencia, ya que tampoco pude encontrar la opinión de Microsoft sobre esto.
Recuerde, Asp Identity es puramente para identificar a alguien, no es necesario tener un E-mail para ser identificado pero nos permiten almacenarlo porque forma parte de una identidad. Cuando crea un nuevo proyecto web en Visual Studio, tiene la opción de opciones de autenticación.
Si selecciona un tipo de proyecto que no esté vacío, como MVC, y establece la autenticación en "Cuentas individuales", obtendrá los fundamentos básicos para la gestión de usuarios. Uno de los cuales incluye una subclase con este aspecto dentro de 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
}
Lo que esto nos dice es que Microsoft tiene la intención de que almacenemos nombres de usuario más complejos (consulte AllowOnlyAlphaNumericUserNames = false), por lo que realmente tenemos señales mixtas.
El hecho de que esto se genere a partir de un proyecto web predeterminado nos da una buena indicación / dirección de Microsoft (y una forma limpia) para permitirnos ingresar correos electrónicos para el campo de nombre de usuario. Está limpio porque el método de creación estático se usa dentro de App_Start \ Startup.Auth.cs al arrancar la aplicación con el contexto Microsoft.OWIN.
El único inconveniente de este enfoque es que terminas almacenando el correo electrónico dos veces ... ¡Lo cual no es bueno!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;