2014-12-16 16 views
31

Zawsze, gdy tworzę nową aplikację z programem visual studio 2013 express dla sieci i korzystam z uwierzytelniania indywidualnych kont i klikam przycisk rejestru zauważam, że implementuje on "e-mail" zamiast "Nazwa użytkownika" i to samo w LoginViewModel, ponieważ używa adresu e-mail do logowania zamiast nazwy użytkownika. Jak mogę to zmienić, aby używać nazwy użytkownika zamiast domyślnego adresu e-mail bez problemów? Również chciałbym wiedzieć, jak przekonwertować domyślny "guid", który jest typem ciągu do "id" (typ całkowity).Użyj nazwy użytkownika zamiast adresu e-mail do tożsamości w Asp.net mvc5

+0

[tutaj] (http://www.asp.net/identity/overview/extensibility/ change-key-for-users-in-aspnet-identity) to bardzo dobry artykuł, który możesz śledzić, a dostaniesz odpowiedź. Zobacz także [pytanie] (http://stackoverflow.com/questions/19758575/asp-net-identity-use-email-instead-of-user-name) Możesz użyć swojej własnej klasy usermanager i użyć nazwy użytkownika zamiast e-maila . – Mairaj

+1

Domyślnie kod używa wiadomości e-mail jako nazwy użytkownika. 'var user = new ApplicationUser {UserName = model.Email, Email = model.Email};'. Dodaj właściwość userName do RegisterViewModel i użyj go zamiast tego. – Lijo

Odpowiedz

36

Połączone pytanie w zaakceptowanej odpowiedzi opisuje, w jaki sposób używać adresu e-mail zamiast nazwy użytkownika, aby uzyskać nazwę użytkownika zamiast adresu e-mail, czego szukałem w Identity 2.0 w projekcie MVC.

W przypadku, gdy ktoś inny dostanie się tutaj z wyszukiwarki Google, w rzeczywistości jest to bardzo łatwe. Jeśli spojrzysz na akcję wpisu, to po prostu ustaw Nazwę użytkownika na Adres e-mail. Więc .........

Dodaj UserName do RegisterViewModel i dodaj go do widoku rejestru.

<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> 

w Rejestrze post działania na AccountController ustawienia użytkownika lub nazwa_użytkownika ViewModel i e-mail do ViewModel E-mail.

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

Nie chcę w żaden sposób korzystać z poczty e-mail. Czy mogę zarejestrować się bez podawania adresu e-mail? –

+0

Nie wiem, czy adres e-mail jest obowiązkowy w modelu, ale jeśli nie, możesz usunąć cztery wiersze w widoku rejestracji dla adresu e-mail i zastąpić je kodem nazwy użytkownika wymienionym powyżej. Następnie możesz ustawić nowego ApplicationUser w następujący sposób w akcji post w swoim AccountController. var user = new NazwaUżytkownika {NazwaUżytkownika = model.UserName, Email = model.Email}; Jeśli adres e-mail jest obowiązkowy, ustaw wiadomość e-mail na string.empty – Hoody

+0

Sprawdzanie poprawności string.Empty. Odpowiedź sasi kumara działa poprawnie. –

19

Aby e-mail jako non wyjątkowy:

Konfiguracja poniżej IdentityConfig

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

To było najprostsze rozwiązanie dla mnie i pozbyłem się jednego problemu, który miałem po konwersji z MVC 4 na MVC 5. – Xipooo

Powiązane problemy