Я также застрял в этом, потому что в наши дни в большинстве случаев имена пользователей представляют собой электронные письма, хотя я могу понять причину отдельного поля электронной почты. Это чисто мои мысли / опыт, поскольку я также не мог найти мнения Microsoft по этому поводу.
Помните, что Asp Identity предназначена исключительно для того, чтобы идентифицировать кого-то, вам не нужно иметь электронную почту для идентификации, но они позволяют нам хранить ее, потому что она является частью личности. Когда вы создаете новый веб-проект в Visual Studio, вам предоставляется возможность выбора параметров аутентификации.
Если вы выберете непустой тип проекта, такой как MVC, и установите для аутентификации значение «Индивидуальные учетные записи», то вам будут предоставлены базовые основы для управления пользователями. Один из них включает в себя подобный подкласс в 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
}
Это говорит нам о том, что Microsoft намеревается хранить более сложные имена пользователей (см. AllowOnlyAlphaNumericUserNames = false), поэтому на самом деле у нас смешанные сигналы.
Тот факт, что это сгенерировано из веб-проекта по умолчанию, дает нам хорошее указание / направление от Microsoft (и чистый способ), позволяющий нам вводить электронную почту в поле имени пользователя. Это чисто, потому что статический метод создания используется в App_Start \ Startup.Auth.cs при загрузке приложения с контекстом Microsoft.OWIN.
Единственным недостатком этого подхода является то, что вы в конечном итоге сохраняете электронную почту дважды ... Что нехорошо!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;