Dodanie swoich pól w Simple Membership MVC4
Wraz z MVC4 wprowadzono ulepszony, wbudowany mechanizm do zarządzania użytkownikami, ich logowaniem, rejestracją itd. Podczas tworzenia nowego projektu MVC4 Visual Studio tworzy wszystkie niezbędne do jego działania modele, kontrolery oraz widoki.
Standardowo do profilu użytkownika przypisana jest tylko jedna cecha: UserName. Nie chcąc wymyślać koła na nowo i chcąc skorzystać z dobrodziejstw tejże implementacji od Microsoftu poniżej przedstawię szybki i sprawdzony sposób na dodanie nowych pól do profilu użytkowniku wg uznania i potrzeb naszej aplikacji.
- Zakładam, że mamy utworzony projekt MVC4 i istnieją w nim wszystkie klasy odpowiedzialne za Simple Membership
- Wchodzimy do katalogu Models i otwieramy plik AccountModel.cs
- Szukamy klasy: public class UserProfile
- Poniżej wpisu: public string UserName { get; set; } dodajmy kolejno swoje pola
-
[Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } public string UserName { get; set; } //dodane pole public string Email { get; set; } }
- Należy pamiętać, że aby Visual Studio utworzył tabele w bazie danych ze zmienionymi danymi (metoda code first), należy najpierw wykonać drop na utworzonych tabelach.
- Teraz w tym samym pliku szukamy klasy: public class RegisterModel w której analogicznie dokładamy nasze nowe pola.
-
public class RegisterModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [Display(Name="Email address")] public string Email { get; set; } [Required] [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [DataType(DataType.Password)] [Display(Name = "Confirm password")] [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] public string ConfirmPassword { get; set; } }
- W tej chwili model ma już wszystkie informacje o naszym nowym profilu. Następnie należy pokazać dodane pole na formularzu rejestracji. W tym celu przechodzimy do pliku Views/Account/Register i dodajemy nasze pole w fieldset
-
<fieldset> <legend>Registration Form</legend> <ol> <li> @Html.LabelFor(m => m.UserName) @Html.TextBoxFor(m => m.UserName) </li> <li> @Html.LabelFor(m => m.Password) @Html.PasswordFor(m => m.Password) </li> <li> @Html.LabelFor(m => m.ConfirmPassword) @Html.PasswordFor(m => m.ConfirmPassword) </li> <li> @Html.LabelFor(m => m.Email) @Html.PasswordFor(m => m.Email) </li> </ol> <input type="submit" value="Register" /> </fieldset></pre>
- Ostatnim krokiem jest dodanie informacji do kontrolera o zapisie wprowadzonych danych do bazy. W tym celu przechodzimy do pliku Controllers/AccountController i zmieniamy metodę Register:
-
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Register(RegisterModel model) { if (ModelState.IsValid) { // Attempt to register the user try { //here is a change WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { model.Email }); WebSecurity.Login(model.UserName, model.Password); return RedirectToAction("Index", "Home"); } catch (MembershipCreateUserException e) { ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); } } // If we got this far, something failed, redisplay form return View(model); }
W tym momencie wszystko skończone. Po uprzednim usunięciu wcześniej utworzonych tabel w bazie danych, podczas uruchamiania aplikacji zostaną utworzone nowe tabele, a klasa UserProfile zyska nowe pole Email.
Polecam wykorzystywanie Simple Membership w aplikacjach MVC4, ponieważ jest to rozwiązanie dobrze sprawdzone, poprawnie napisane i łatwe w dostosowaniu do swoich potrzeb. Jednocześnie oferuję bardzo łatwe połączenia logowania z m.in. Facebookiem co znacznie ułatwia integrację aplikacji z serwisami społecznościowymi.