Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Продолжим работу с проектом из прошлой темы и добавим в него функционал регистрации пользователей.
Класс IdentityUser определяет множество свойств, однако нам необязательно всех их устанавливать. И в данном случае для создания пользователей нам лучше воспользоваться связующей моделью, которая установит все необходимые свойства. Итак, добавим в папку Models класс, который будет представлять пользователя:
using System; using System.ComponentModel.DataAnnotations; namespace AspNetIdentityApp.Models { public class RegisterModel { [Required] public string Email { get; set; } [Required] public int Year { get; set; } [Required] [DataType(DataType.Password)] public string Password { get; set; } [Required] [Compare("Password", ErrorMessage = "Пароли не совпадают")] [DataType(DataType.Password)] public string PasswordConfirm { get; set; } } }
Теперь добавим в папку Controllers новый контроллер AccountController:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using AspNetIdentityApp.Models; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin; namespace AspNetIdentityApp.Controllers { public class AccountController : Controller { private ApplicationUserManager UserManager { get { return HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); } } public ActionResult Register() { return View(); } [HttpPost] public async Task<ActionResult> Register(RegisterModel model) { if (ModelState.IsValid) { ApplicationUser user = new ApplicationUser { UserName = model.Email, Email = model.Email, Year = model.Year }; IdentityResult result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { return RedirectToAction("Login", "Account"); } else { foreach (string error in result.Errors) { ModelState.AddModelError("", error); } } } return View(model); } } }
Первым делом в контроллере создается свойство UserManager, возвращающее объект ApplicationUserManager. Через него мы будем взаимодействовать с
хранилищем пользователей. Для получения хранилища применяется выражение HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>()
Для собственно регистрации определен метод Register в Get- и Post-версиях. Post-версия представляет асинхронный метод, поскольку для создания пользователя
здесь используется асинхронный вызов UserManager.CreateAsync()
. Этот метод возвращает объект IdentityResult.
Если создание пользователя прошло успешно, то его свойство Succeeded
будет равно true
.
И в конце создадим представление для регистрации Register.cshtml:
@model AspNetIdentityApp.Models.RegisterModel @{ ViewBag.Title = "Register"; } <h2>Регистрация</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div> <h4>Регистрация пользователя</h4> <hr /> @Html.ValidationSummary(false) <div> Электронный адрес <div> @Html.EditorFor(model => model.Email) </div> </div> <div> Год рождения <div> @Html.EditorFor(model => model.Year) </div> </div> <div> Пароль <div> @Html.EditorFor(model => model.Password) </div> </div> <div> Подтвердить пароль <div> @Html.EditorFor(model => model.PasswordConfirm) </div> </div> <div> <div> <input type="submit" value="Зарегистрировать" /> </div> </div> </div> }
И после ввода данных данные о пользователе попадут в таблицу AspNetUsers: