Как наследовать от UserIdentity с наименьшей возможной работой? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть иерархия классов, унаследованная от IdentityUser, мне интересно, что мне нужно делать, если «ничего» в моей иерархии, кроме того, что уже определено в IdentityUser, относится к аутентификации?

Могу ли я просто наследовать от него и создавать объекты, все еще используя

            .AddDefaultIdentity<IdentityUser>()

Или это не будет работать, когда мои пользователи являются подтипом IdentityUser, даже если я не использую какие-либо их свойства для аутентификации?

У меня нет конечного узла в качестве иерархии веток пользователей, поэтому я не могу использовать самый низкий класс.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Поскольку я не смог найти пример в сети (все они показывают, как использовать пользовательский тип пользователя, а не иерархию), я попытался немного покопаться в коде.

По-видимому, с использованием проблем нетлюбой объект, унаследованный от IdentityUser (или любой другой класс, указанный в качестве пользователя в AddDefaultIdentity.

). При попытке создать пользователя, передающего объект, который наследует от этого класса, будет создан соответствующий объект в базе данных (объектне преобразуется в UserManager.CreateAsync, но добавляется в контекст простым добавлением в сам контекст, а не в типизированный DBSet).

Соответствующий код можно найти в исходном коде UserStore: https://github.com/aspnet/Identity/blob/master/src/EF/UserStore.cs строка 165, мы можем видеть, что существует простое

Context.Add(user);

Разрешение ядру EF создать соответствующий дискриминатор в БД.

В общем, если нет настройки аутентификации /требуется идентификация, и есть только необходимость добавить больше информации пользователю, иерархия пользователей, кажется, работает нормально и оставляет значение по умолчанию UserIdentityКласс, объявленный в службах, не создает никаких проблем.

Я еще не проверял, не создает ли он проблемы с извлечением пользователя через UserManager, поскольку он не требуется для моего варианта использования.

0 голосов
/ 02 апреля 2019

Могу ли я просто наследовать его и создавать объекты, все еще используя

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

services.AddDefaultIdentity<ApplicationUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultUI();

Обычно мы расширяем IdentityUser, чтобы включить пользовательские свойства для пользователя:

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}

Ссылка: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-2.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...