Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Систему AspNet Identity образует множество различных классов, предназначенных для различных задач. Рассмотрим основные классы.
Для взаимодействия с базой данных в пространстве имен Microsoft.AspNet.Identity.EntityFramework
определен класс
IdentityDbContext. Это обычный контекст данных, производный от DbContext, который уже содержит свойства, необходимые для
управления пользователями и ролями: свойства Users
и Roles
. Хотя в реальном приложении мы будем иметь дело с классами, производными от
IdentityDbContext. Например, у нас есть такой контекст данных:
public class ApplicationContext : IdentityDbContext<ApplicationUser> { public ApplicationContext() : base("IdentityDb") { } public static ApplicationContext Create() { return new ApplicationContext(); } }
Выведем всех пользователей из бд:
public ActionResult Index() { using(ApplicationContext db = new ApplicationContext()) { return View(db.Users.ToList()); } }
Функциональность пользователей в AspNet Identity сосредоточена в классе IdentityUser, который определен в
пространстве имен Microsoft.AspNet.Identity.EntityFramework
. IdentityUser реализует интерфейс IUser и определяет следующие свойства:
Claims: возвращает коллекцию claims - специальных атрибутов, которыми обладает пользователь и которые хранят о пользователе определенную информацию
Email: email пользователя
Id: уникальный идентификатор пользователя
Logins: возвращает коллекцию логинов пользователя
PasswordHash: возвращает хэш пароля
Roles: возвращает коллекцию ролей пользователя
PhoneNumber: возвращает номер телефона
SecurityStamp: возвращает некоторое значение, которое меняется при каждой смене настроек аутентификации для данного пользователя
UserName: возвращает ник пользователя
AccessFailedCount: число попыток неудачного входа в систему
EmailConfirmed: возвращает true
, если email был подтвержден
PhoneNumberConfirmed: возвращает true
, если телефонный номер был подтвержден
TwoFactorEnabled: если равен true
, то для данного пользователя включена двухфакторная авторизация
Как правило, для управления пользователями определяют класс, производный от IdentityUser:
class ApplicationUser : IdentityUser { }
Непосредственное управление пользователями осуществляется с помощью класса UserManager<T>, которое находится
в пространстве имен Microsoft.AspNet.Identity
.
Этот класс определяет множество методов, которые имеют как синхронные, так и асинхронные версии. Перечислим основные:
ChangePassword(id, old, new) / ChangePasswordAsync(id, old, new): изменяет пароль пользователя
Create(user) / CreateAsync(user): создает нового пользователя
Delete(user) / DeleteAsync(user): удаляет пользователя
Find(user, pass) / FindAsync(user, pass): ищет пользователя по определенному логину и паролю
FindById(id) /FindByIdAsync(id): ищет пользователя по id
FindByEmail(email) / FindByEmailAsync(email): ищет пользователя по email
FindByName(name) / FindByNameAsync(name): ищет пользователя по нику
Update(user) / UpdateAsync(user): обновляет пользователя
Users: возвращает всех пользователей
AddToRole(id, name) / AddToRoleAsync(id, name): добавляет для пользователя с определенным id роль name
GetRoles(id) / GetRolesAsync (id): получает все роли пользователя по id
IsInRole(id, name) / IsInRoleAsync(id, name): возвращает true, если пользователь с данным id имеет роль name
RemoveFromRole(id, name) / RemoveFromRoleAsync(id, name): удаляет роль name у пользователя по id
Создадим класс для управления пользователями:
using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.AspNet.Identity.Owin; using Microsoft.Owin; namespace AspNetIdentityApp.Models { public class ApplicationManager : UserManager<ApplicationUser> { public ApplicationManager(IUserStore<ApplicationUser> store) : base(store) { } public static ApplicationManager Create (IdentityFactoryOptions<ApplicationManager> options, IOwinContext context) { ApplicationContext db = context.Get<ApplicationContext>(); ApplicationManager manager = new ApplicationManager(new UserStore<ApplicationUser>(db)); return manager; } } }
Для создания класса используется объект UserStore<ApplicationUser>. Класс UserStore
представляет реализацию интерфейса IUserStore<T>
. В свою очередь, чтобы создать объект UserStore
,
необходимо использовать контекст данных ApplicationContext.
Каждая роль в ASP.NET Identity представляет объект интерфейса IRole. В Entity Framework имеется встроенная реализация данного интерфейса в виде класса IdentityRole.
Класс IdentityRole имеет следующие свойства:
Id
: уникальный идентификатор роли
Name
: название роли
Users
: коллекция объектов IdentityUserRole, который связывают пользователя и роль
Для управления ролями в ASP.NET Identity имеется класс RoleManager<T>, где T представляет реализацию интерфейса IRole. Класс RoleManager управляет ролями с помощью следующих синхронных и асинхронных методов:
Create(role) / CreateAsync(role)
: создает новую роль с именем role
Delete(role) / DeleteAsync(role)
: удаляет роль с именем role
FindById(id) / FindByIdAsync(id)
: ищет роль по id
FindByName(name) / FindByNameAsync(name)
: ищет роль по названию
RoleExists(name) / RoleExistsAsync(name)
: возвращает true, если роль с данным названием существует
Update(role) / UpdateAsync(role)
: обновляет роль
Roles
: возвращает набор всех имеющихся ролей
Теперь рассмотрим применение этих классов в приложении на ASP.NET MVC.