Подтвердить что ты не робот

Как использовать ASP.NET Identity 3.0 без Entity Framework

Все примеры, которые я видел в настоящее время для ASP.NET Identity 3.0, используют Entity Framework для хранения данных, связанных с пользователем.

Есть ли какой-либо пример, который не использует Entity Framework и где ApplicationUser класс не получен из Microsoft.AspNet.Identity.EntityFramework.IdentityUser?

В ASP.NET Identity 2.x необходимо было реализовать интерфейс IUser. Кажется, что сейчас нет такого интерфейса, поэтому мы не уверены, как правильно определить класс User. Практически нет документации по этому вопросу.

Вторая проблема заключается в вызове AddIdentity в Startup.ConfigureServices. Он довольно привязан к конкретным классам из пространства имен Microsoft.AspNet.Identity.EntityFramework, и неясно, как регистрировать службы идентификации без этих классов.

4b9b3361

Ответ 1

Я реализовал его в своем проекте, основные вещи, которые вы должны реализовать, - это UserStore и RoleStore

мои классы SiteUser и SiteRole не наследуют ничего

главное - добавить свои собственные сервисы, прежде чем позволить идентификатору asp.net добавить свои собственные услуги.

services.TryAdd(ServiceDescriptor.Scoped<IUserStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserPasswordStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserEmailStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserLoginStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserRoleStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserClaimStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserPhoneNumberStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserLockoutStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserTwoFactorStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IRoleStore<SiteRole>, RoleStore<SiteRole>>());

здесь будут зарегистрированы некоторые из тех же интерфайлов, но он будет использовать ваши, если они будут зарегистрированы сначала

services.AddIdentity<SiteUser, SiteRole>();

Ответ 2

Есть ли какой-либо пример, который не использует EntityFramework и где класс ApplicationUser не является производным от Microsoft.AspNet.Identity.EntityFramework.IdentityUser?

Поскольку ASP.NET Identity 3 является частью .NET Framework 5, которая до сих пор не выпущена, думаю, вы не найдете никаких примеров.

В ASP.NET Identity 2.x необходимо было реализовать интерфейс IUser. Кажется, что сейчас нет такого интерфейса, поэтому мы не уверены, как правильно определить класс "Пользователь". Практически нет документации по этому вопросу.

Опять же, отсутствие документов, вероятно, связано с нереализованным характером программного обеспечения. Однако, глядя на исходный код, кажется, что ApplicationUser может быть получен из любого объекта POCO - без необходимости реализации IUser<TKey> интерфейс.

Что касается настройки служб, посмотрите IdentityServiceCollectionExtensions и IdentityEntityFrameworkBuilderExtensions. Кажется, что первое в ядре идентичности является средством предоставления контекста, в котором можно регистрировать службы для идентификации приложения, тогда как вторая является реализацией, специфичной для сущностей, с использованием этого контекста.

Решение для реализации чего-то, что использует ASP.NET Identity 3, но не EF, похоже, что это просто вопрос предоставления различных реализаций интерфейсов служб идентификации и последующего подключения этих зависимостей во время настройки приложения. Вы можете использовать базовую реализацию EntityFramework как руководство для DIY. Но предостережение emptor, личность 3 может измениться снова до финального выпуска, поэтому все, что вы создаете против личности 3, теперь может быть изменено.