2014-12-16 4 views
31

Immer wenn ich eine neue Anwendung mit Visual Studio 2013 Express für das Web und die Verwendung der einzelnen Konten Authentifizierung erstellen und ich den Registrierungsbutton Ich bemerke, dass es implementiert "E-Mail" anstelle von "Benutzername" und das gleiche gilt für das LoginViewModel, da es sich mit E-Mail anstelle von Benutzername für die Anmeldung anmeldet. Wie kann ich dies ändern, um Benutzername anstelle der Standard-E-Mail ohne Probleme zu verwenden? Außerdem würde ich gerne wissen, wie man den Standard 'guid', der ein String-Typ ist, in 'id' (Integer-Typ) konvertiert.Verwenden Sie Benutzername anstelle von E-Mail für Identität in Asp.net mvc5

+0

[hier] (http://www.asp.net/identity/overview/extensibility/ change-primary-key-für-Benutzer-in-Aspnet-Identität) ist ein sehr guter Artikel, den Sie folgen können und Sie erhalten die Antwort. Siehe auch [question] (http://stackoverflow.com/questions/19758575/asp-net-identity-use-email-instead-of-user-name) Sie können Ihre eigene usermanager-Klasse verwenden und Benutzernamen statt E-Mail verwenden . – Mairaj

+1

Standardmäßig verwendet der Code E-Mail als Benutzername. 'var user = new ApplicationUser {Benutzername = model.Email, Email = model.Email};'. Fügen Sie die UserName-Eigenschaft zu RegisterViewModel hinzu und verwenden Sie sie stattdessen. – Lijo

Antwort

36

Die verknüpfte Frage in der angenommenen Antwort beschreibt, wie E-Mail anstelle von UserName zu verwenden ist, OP wollte den Benutzernamen anstelle von E-Mail, was ich in Identity 2.0 in einem MVC-Projekt suchte.

Falls jemand von einer Google-Suche hierher kommt, ist es eigentlich sehr einfach, dies zu tun. Wenn Sie sich die Registrierungs-Post-Aktion anschauen, wird einfach der Benutzername auf die Email-Adresse gesetzt. So .........

Fügen Sie UserName zum RegisterViewModel hinzu und fügen Sie es der Registeransicht hinzu.

<div class="form-group"> 
     @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @placeholder = "Username or email" }) 
     </div> 
</div> 

Im Register Beitrag Aktion auf der Account setzen Sie den Benutzernamen des Benutzernamens des Ansichtsmodell und die E-Mail an die E-Mail des Ansichtsmodell.

var user = new ApplicationUser { UserName = model.UserName, Email = model.Email }; 
+0

Ich möchte keine E-Mail in irgendeiner Weise verwenden. Kann ich mich ohne Angabe einer E-Mail-Adresse registrieren? –

+0

Ich weiß nicht, ob die E-Mail-Adresse im Modell obligatorisch ist, aber wenn nicht, können Sie die vier Zeilen in der Registrierungsansicht für die E-Mail-Adresse entfernen und sie durch den oben aufgeführten UserName-Code ersetzen. Dann könnten Sie den neuen ApplicationUser in der Post-Aktion in Ihrem AccountController wie folgt einstellen. var user = new Anwendungsbenutzer {UserName = model.UserName, Email = model.Email}; Wenn die E-Mail-Adresse obligatorisch ist, setzen Sie die E-Mail einfach auf string.empty – Hoody

+0

Validierungsprüfungen für string.Empty. Sasi Kumars Antwort funktioniert richtig. –

19

Um E-Mails als nicht einzigartig zu machen:

Konfigurieren unten in IdentityConfig

manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
      { 
       AllowOnlyAlphanumericUserNames = false, 
       RequireUniqueEmail = false     
      }; 
+1

Dies war die einfachste Lösung für mich und wurde ein Problem, das ich nach der Konvertierung von MVC 4 zu MVC 5 hatte. – Xipooo

Verwandte Themen