Ich war auch damit beschäftigt, weil Benutzernamen heutzutage meistens E-Mails sind. Ich kann jedoch die Gründe für ein separates E-Mail-Feld verstehen. Dies sind nur meine Gedanken / Erfahrungen, da ich auch nicht das Wort von Microsoft dazu finden konnte.
Denken Sie daran, Asp Identity dient lediglich dazu, jemanden zu identifizieren. Sie müssen keine E-Mail haben, um identifiziert zu werden, aber wir können sie speichern, da sie Teil einer Identität ist. Wenn Sie in Visual Studio ein neues Webprojekt erstellen, erhalten Sie die Option für Authentifizierungsoptionen.
Wenn Sie einen nicht leeren Projekttyp wie MVC auswählen und die Authentifizierung auf "Einzelkonten" setzen, erhalten Sie die grundlegenden Grundlagen für die Benutzerverwaltung. Eine davon enthält eine Unterklasse, die in App_Start \ IdentityConfig.cs wie folgt aussieht:
// 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
}
Dies sagt uns, dass Microsoft beabsichtigt, komplexere Benutzernamen zu speichern (siehe AllowOnlyAlphaNumericUserNames = false), sodass wir wirklich gemischte Signale haben.
Die Tatsache, dass dies aus einem Standard-Webprojekt generiert wird, gibt uns einen guten Hinweis / eine gute Anleitung von Microsoft (und einen sauberen Weg), damit wir E-Mails für das Feld Benutzername eingeben können. Es ist sauber, da die statische Erstellungsmethode in App_Start \ Startup.Auth.cs verwendet wird, wenn die Anwendung mit dem Microsoft.OWIN-Kontext gebootet wird.
Der einzige Nachteil dieses Ansatzes ist, dass Sie die E-Mail am Ende zweimal speichern ... Was nicht gut ist!
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;