Пользовательский UserStore MVC 5

Мне нужно создать пользовательский UserStore (в основном потому, что по умолчанию у меня есть некоторые требования, которые не являются частью фреймворка), но я не могу найти нигде в документации о том, как это сделать.

Я видел две части информации, которые близки:

В основном мне нужно знать, как создать пользователя и как войти. Остальное я могу понять. Я предполагаю, что основной проблемой является обработка паролей и т.д.

Кто-нибудь знает какую-либо документацию где-нибудь, что могло бы мне помочь? Или, если есть разбивка по пользовательскому хранилищу по умолчанию, и это внутренние методы, которые были бы большими (я мог бы адаптироваться оттуда).

Ответы

Ответ 1

На самом деле это не так сложно.

Создайте новый класс, который реализует интерфейс IUserStore.

public class MyUserStore : IUserStore<User> { }

... затем реализовать свои методы. Я думаю, что есть 5 или 6, чтобы начать с, что дело с созданием/обновлением/удалением/поиском пользователей. Если вы используете сущность-фреймворк для своих пользовательских объектов, тогда просто конструктор вставляет экземпляр его в экземпляр хранилища пользователя.

public class MyUserStore : IUserStore<User>
{
    private readonly MyDbContext _dbContext;
    public MyUserStore(MyDbContext dbContext) { _dbContext = dbContext; }
}

Затем в методах интерфейса просто передайте свой dbcontext:

Task IUserStore<User>.CreateAsync(User user)
{
    _dbContext.Set<User>().Create(user);
    return Task.FromResult(0);
}

Тогда есть много других дополнительных интерфейсов, которые вы можете реализовать для поддержки дополнительных функций. Например, если вы хотите, чтобы ваш UserStore мог обрабатывать шифрование паролей для вас, реализуйте IUserPasswordStore:

public class MyUserStore : IUserStore<User>, IUserPasswordStore<User> { }

... и т.д. для других интерфейсов, таких как IUserRoleStore и т.д.

Что может действительно помочь - это инструмент декомпиляции, такой как .NET Reflector или ReSharper для перехода к декомпилированным источникам. Если вы декомпилируете UserStore по умолчанию в библиотеке Microsoft.AspNet.Identity.EntityFramework, вы можете посмотреть, как они это сделали. Некоторые из декомпилированного кода могут быть трудночитаемыми, поскольку некоторые из них являются асинхронными, но вы должны получить его суть.