我也对此感到困惑,因为这些天大多数时候用户名都是电子邮件,但我可以理解单独的电子邮件字段的原因。这些纯粹是我的想法/经验,因为我也找不到微软对此的说法。
请记住,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
}
这告诉我们的是,微软打算让我们存储更复杂的用户名(请参阅 AllowOnlyAlphaNumericUserNames = false),所以我们确实有混合信号。
这是从默认 Web 项目生成的事实为我们提供了来自 Microsoft 的良好指示/指导(以及一种干净的方式),使我们能够为用户名字段输入电子邮件。它很干净,因为在使用 Microsoft.OWIN 上下文引导应用程序时,在 App_Start\Startup.Auth.cs 中使用了静态创建方法。
这种方法的唯一缺点是您最终将电子邮件存储了两次......这不好!