我也一直坚持这一点,因为这些天大多数时候用户名都是电子邮件,但是我可以理解单独的电子邮件字段的原因。这些纯粹是我的想法/经验,因为我也找不到微软对此的发言权。
请记住,Asp Identity纯粹是为了识别某人,您不必识别电子邮件,但由于它构成身份的一部分,因此我们可以存储它。在Visual Studio中创建新的Web项目时,将为您提供身份验证选项。
如果选择非空项目类型(例如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),因此确实存在混合信号。
这是从默认的Web项目中生成的事实,它为我们提供了一个很好的指示/指示(来自Microsoft)(并且是一种简洁的方法),使我们能够为用户名字段输入电子邮件。这很干净,因为在使用Microsoft.OWIN上下文引导应用程序时,在App_Start \ Startup.Auth.cs中使用了静态创建方法。
这种方法的唯一缺点是,您最终将电子邮件存储了两次……。这不好!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;