Регистрация и создание пользователей в ASP.NET Identity

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 07.12.2015

Продолжим работу с проектом из прошлой темы и добавим в него функционал регистрации пользователей.

Класс 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>
}
Регистрация в Asp.Net Identity

И после ввода данных данные о пользователе попадут в таблицу AspNetUsers:

Создание пользователей в Asp.Net Identity
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850