FirstName и LastName и другие поля в ASP.Net.Core.Identity 2.0 - PullRequest
0 голосов
/ 10 июля 2019

Я новичок в ASP.Net.Core.Identity.2.Я ранее свернул свою собственную безопасность, но с Net.Core 2.2.Я не могу обновить свой код, так как большая его часть не будет работать, поэтому я решил переключиться.Все, что я пытаюсь сделать, это добавить новые свойства в User, чтобы я мог сделать что-то вроде: -

User.FirstName //or
User.Identity.FirstName
//or some other syntax

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

Я изменил классами, как показано ниже.и обновил базу данных.Я могу видеть новые поля в базе данных.Но что мне делать дальше?Добраться до этого было довольно легко, но теперь я полностью застрял.

    public partial class SystemUser : IdentityUser<int>
    {
        //public int Id { get; set; }
        public string Title { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Mobile { get; set; }
        public string JobTitle { get; set; }
        public string Hint { get; set; }
        public int AddressId { get; set; }
        public bool IsActive { get; set; }
        //
        // Summary:
        //     Gets or sets the date and time, in UTC, when any user lockout ends.
        //
        // Remarks:
        //     A value in the past means the user is not locked out.
        [Column(TypeName = "datetime")]
        public override DateTimeOffset? LockoutEnd { get; set; }
    }

Я даже не могу сделать что-то подобное

 SystemUser user = _context.SystemUser.Where(s => s.UserName == User.Identity.Name).FirstOrDefault();

Поскольку это ничего не возвращает привсе.Я, кажется, расстраиваюсь на каждом шагу: (

Я использую VS2017, MySql, Pomelo.EntityFrameworkCore.MySql. Любая помощь будет очень признательна. Заранее спасибо.

Чтобы получитьэто работало, что я должен был сделать:

  • Удалить сохраненный Identity cookie
  • Изменить данные из строки на int (1, 2, 3 и т. д.)
  • В базе данных измените столбец ID со строки на int

Сейчас он работает, но я не знаю, какие еще скрытые драгоценные камни ждут меня

1 Ответ

1 голос
/ 11 июля 2019

Для настройки IdentityUser нет необходимости добавлять SystemUser к DbContext.

Выполните следующие действия:

  1. SystemUser

    public class SystemUser : IdentityUser<int>
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        //your other properties
    }
    
  2. ApplicationDbContext

    public class ApplicationDbContext : IdentityDbContext<SystemUser,IdentityRole<int>,int>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    
        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
        }
    }
    
  3. IdentityHostingStartup

    public class IdentityHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureServices((context, services) => {
                services.AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(
                        context.Configuration.GetConnectionString("ApplicationDbContextConnection")));
    
                services.AddDefaultIdentity<SystemUser>()
                    .AddEntityFrameworkStores<ApplicationDbContext>();
            });
        }
    }
    
  4. Вариант использования

    public class HomeController : Controller
    {
        private readonly ApplicationDbContext _context;
        private readonly UserManager<SystemUser> _userManager;
        public HomeController(ApplicationDbContext context
            , UserManager<SystemUser> userManager)
        {
            _context = context;
            _userManager = userManager;
        }
        [Authorize]
        public async Task<IActionResult> Index()
        {
            SystemUser user = _context.Users.Where(s => s.UserName == User.Identity.Name).FirstOrDefault();
            SystemUser user1 = await _userManager.FindByNameAsync(User.Identity.Name);
            return View();
        }
    }
    
...