Как удалить поля basi c и добавить настраиваемые поля в AspNetCore.Identity? - PullRequest
0 голосов
/ 23 апреля 2020

Basi c структура Идентичность выглядит

using Microsoft.AspNetCore.Identity;
using System;

namespace Microsoft.AspNetCore.Identity
{

    //     Represents a user in the identity system

    //   TKey:
    //     The type used for the primary key for the user.
    public class IdentityUser<TKey> where TKey : IEquatable<TKey>
    {

        //     Initializes a new instance of Microsoft.AspNetCore.Identity.IdentityUser`1.
        public IdentityUser();

        //     Initializes a new instance of Microsoft.AspNetCore.Identity.IdentityUser`1.

        public IdentityUser(string userName);

        //     Gets or sets the date and time, in UTC, when any user lockout ends.
        //     A value in the past means the user is not locked out.
        public virtual DateTimeOffset? LockoutEnd { get; set; }

        //     Gets or sets a flag indicating if two factor authentication is enabled for this
        //     user.
        [PersonalData]
        public virtual bool TwoFactorEnabled { get; set; }

        //     Gets or sets a flag indicating if a user has confirmed their telephone address.
        [PersonalData]
        public virtual bool PhoneNumberConfirmed { get; set; }

        //     Gets or sets a telephone number for the user.
        [ProtectedPersonalData]
        public virtual string PhoneNumber { get; set; }

        //     A random value that must change whenever a user is persisted to the store
        public virtual string ConcurrencyStamp { get; set; }

        //     A random value that must change whenever a users credentials change (password
        //     changed, login removed)
        public virtual string SecurityStamp { get; set; }

        //     Gets or sets a salted and hashed representation of the password for this user.
        public virtual string PasswordHash { get; set; }

        //     Gets or sets a flag indicating if a user has confirmed their email address.
        [PersonalData]
        public virtual bool EmailConfirmed { get; set; }

        //     Gets or sets the normalized email address for this user.
        public virtual string NormalizedEmail { get; set; }

        //     Gets or sets the email address for this user.
        [ProtectedPersonalData]
        public virtual string Email { get; set; }

        //     Gets or sets the normalized user name for this user.
        public virtual string NormalizedUserName { get; set; }

        //     Gets or sets the user name for this user.
        [ProtectedPersonalData]
        public virtual string UserName { get; set; }

        //     Gets or sets the primary key for this user.
        [PersonalData]
        public virtual TKey Id { get; set; }

        //     Gets or sets a flag indicating if the user could be locked out.
        public virtual bool LockoutEnabled { get; set; }

        //     Gets or sets the number of failed login attempts for the current user.
        public virtual int AccessFailedCount { get; set; }

        //     Returns the username for this user.
        public override string ToString();
    }
}

Но мне не нужно много полей (таких как EmailConfirmed и некоторые другие).

Но мне нужно добавить некоторые настраиваемые поля простого типа ( string, int ) и поле для отношения «многие ко многим» ( List ), такие же, как отношение Users + Роли «Пользователи - ПользователиРоли - Роли» .

Как это можно сделать без потери функциональности и возможности полного использования Идентичность

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

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

Добавление дополнительных свойств работает так же, как и любой другой объект. Создайте класс, если он еще не создан, который наследуется от IdentityUser, и добавьте в него любые свойства, которые вам нравятся.

0 голосов
/ 23 апреля 2020

Вы не можете удалять поля в IdentityUser, но вы все равно можете добавить свои собственные - просто извлеките свой пользовательский класс из IdentityUser, а затем используйте перегрузку, которая принимает ваш пользовательский класс в качестве параметра типа (services.AddIdentity<MyApplicationUser, IdentityRole>(...)). Ваши пользовательские свойства будут присутствовать всякий раз, когда вы получите пользовательский экземпляр из UserManager<MyApplicationUser>. Затем вы можете игнорировать те, которые вам не нужны (например, я установил для EmailConfirmed значение true, когда вы создаете своих пользователей, а затем забыл об этом).

К сожалению, это работает только для простых типов данных, если вам нужны пользовательские отношения с другими объектами, единственным вариантом может быть замена частей удостоверения на ваши собственные. Я должен был сделать что-то вроде этого (заменить всю роль / часть заявки на идентичность чем-то нестандартным), и это было не красиво - в netcore 2.1 это включало такие вещи, как написание пользовательского хранилища и ручное удаление нескольких сервисов из ServiceCollection после идентификации регистрация.

Текущий netcore, похоже, имеет AddIdentityCore<TUser>(this IServiceCollection), и единственным требованием к TUser является то, что это ссылочный тип (where TUser : class), поэтому я бы начал с него, если вам действительно нужно. Вам, вероятно, все еще придется реализовать свой собственный пользовательский магазин, который знает, как получить требования от вашего пользовательского класса - будьте готовы инвестировать в это хотя бы один день.

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