asp.net - net - mvc user identity




Konfigurieren Sie Microsoft.AspNet.Identity, um die E-Mail-Adresse als Benutzernamen zuzulassen (6)

Die C # -Version davon (in App_Code \ IdentityModels.cs) ist

public UserManager()
        : base(new UserStore<ApplicationUser>(new ApplicationDbContext()))
    {
        UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
    }

Ich bin dabei, eine neue Anwendung zu erstellen und begann mit EF6-rc1, Microsoft.AspNet.Identity.Core 1.0.0-rc1, Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1, Microsoft.AspNet.Identity .Owin 1.0.0-rc1, usw. und mit den RTM-Versionen gestern habe ich sie über NuGet heute Abend auf RTM aktualisiert.

Abgesehen von ein paar Codeänderungen an der Arbeit, die ich bisher gemacht hatte, schien alles gut zu laufen, bis ich versuchte, ein lokales Benutzerkonto für die App zu erstellen.

Ich hatte an E-Mail-Adressen gearbeitet, die das Format des Benutzernamens waren, das mit dem Veröffentlichungskandidaten funktionierte, aber jetzt, wenn ein Benutzer mit einer E-Mail-Adresse für einen Benutzernamen erstellt wird, gibt es den folgenden Validierungsfehler:

User name [email protected] is invalid, can only contain letters or digits.

Ich habe die letzte Stunde oder so nach einer Lösung oder Dokumentation nach Konfigurationsoptionen dafür gesucht, aber ohne Erfolg.

Gibt es eine Möglichkeit, es zu konfigurieren, um E-Mail-Adressen für Benutzernamen zu erlauben?


Ich war auch mit dieser Sache fest, weil die meisten der Zeit Benutzernamen sind E-Mails in diesen Tagen, kann ich aber die Begründung eines separaten E-Mail-Feld verstehen. Das sind rein meine Gedanken / Erfahrungen, da ich auch Microsoft dazu nicht finden konnte.

Denken Sie daran, dass Asp Identity nur dazu dient, jemanden zu identifizieren. Sie müssen keine E-Mail haben, um identifiziert zu werden, aber sie erlauben uns, sie zu speichern, weil sie Teil einer Identität ist. Wenn Sie ein neues Webprojekt in Visual Studio erstellen, haben Sie die Option für Authentifizierungsoptionen.

Wenn Sie einen nicht leeren Projekttyp wie MVC auswählen und die Authentifizierung auf "Einzelne Konten" festlegen, erhalten Sie die grundlegenden Grundlagen für die Benutzerverwaltung. Eine davon enthält eine Subklasse, die in App_Start \ IdentityConfig.cs folgendermaßen 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
}

Was uns sagt, ist, dass Microsoft beabsichtigt, komplexere Benutzernamen zu speichern (siehe AllowOnlyAlphaNumericUserNames = false), also haben wir wirklich gemischte Signale.

Die Tatsache, dass dies aus einem Standard-Webprojekt generiert wird, gibt uns eine gute Richtung / Richtung von Microsoft (und eine saubere Methode), um es uns zu ermöglichen, E-Mails für das Feld Benutzername einzugeben. Es ist sauber, da die static create-Methode in App_Start \ Startup.Auth.cs verwendet wird, wenn die Anwendung mit dem Microsoft.OWIN-Kontext gestartet wird.

Der einzige Nachteil dieses Ansatzes ist, dass Sie die E-Mail zweimal speichern ... Was nicht gut ist!


In meinem Fall, in VS 2013 C #, MVC 5.2.2, mit ASP.NET Identity 2.0 ausgeführt, bestand die Lösung darin, den ApplicationUserManager-Konstruktor in App_Start \ IdentityConfig.cs wie folgt zu aktualisieren:

public ApplicationUserManager(IUserStore<ApplicationUser> store)
        : base(store)
    {
        this.UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
    }

Sie können dies zulassen, indem Sie Ihren eigenen UserValidator in den UserManager einbinden oder ihn einfach in der Standardimplementierung ausschalten:

UserManager.UserValidator = new UserValidator<TUser>(UserManager) { AllowOnlyAlphanumericUserNames = false }

Wenn Sie IdentityConfig.cs nicht finden können, ersetzen Sie Ihren AccountController-Konstruktor durch diesen Code.

public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) 
  {
      AllowOnlyAlphanumericUserNames = false  
  };
}





asp.net-identity