Диспетчер регистрации удостоверений не может выполнить вход пользователя-администратора, созданного системой seeder ASP.NET СЕРДЕЧНИК

#c# #asp.net #asp.net-core

Вопрос:

Я пытаюсь ввести пользователя-администратора с ролью, назначенной через класс сеялки. Пользователь успешно создается (пароль хэшируется в БД), но когда я пытаюсь войти с его помощью, я получаю «Неверную попытку входа». Вот код для всех классов и конфигураций, которые я создал.

 public abstract class BaseSeeder : ISeeder  {  private readonly IServiceProvider serviceProvider;   private readonly IConfiguration config;    protected BaseSeeder(IServiceProvider serviceProvider, ILogger logger, IConfiguration config)  {  this.serviceProvider = serviceProvider;  Logger = logger;  this.config = config;  }   protected string AdminEmail =gt; this.config.GetSection("AdminEmailAddres").Value;   protected string AdminPassword =gt; this.config.GetSection("AdminPassword").Value;   protected IEnumerablelt;stringgt; AvailableRoles =gt; new string[] { this.Roles.AdminRole, this.Roles.UserRole, this.Roles.CustomerRole };   protected RoleModel Roles =gt; this.config.GetSection("AvailableRoles").GetChildren().ToList()  .Select(v =gt; new RoleModel  {  AdminRole = v.GetValuelt;stringgt;("AdminRole"),  UserRole = v.GetValuelt;stringgt;("UserRole"),  CustomerRole = v.GetValuelt;stringgt;("CustomerRole"),  }).FirstOrDefault();   protected UserManagerlt;ApplicationUsergt; UserManager =gt; this.serviceProvider.GetRequiredServicelt;UserManagerlt;ApplicationUsergt;gt;();   protected RoleManagerlt;ApplicationRolegt; RoleManager =gt; this.serviceProvider.GetRequiredServicelt;RoleManagerlt;ApplicationRolegt;gt;();   protected ILogger Logger { get; }   public abstract Task SeedAsync(ApplDBContext dataBase, IServiceProvider serviceProvider, IConfiguration config);  

Это базовый класс сеялки. Вот роли и сеялки администратора:

 public class RoleSeeder : BaseSeeder  {  public RoleSeeder(IServiceProvider serviceProvider, ILogger logger, IConfiguration config)  : base(serviceProvider, logger, config)  {  }   public override async Task SeedAsync(ApplDBContext dataBase, IServiceProvider serviceProvider, IConfiguration config)  {  foreach (var roleName in this.AvailableRoles)  {  if (await this.RoleManager.RoleExistsAsync(roleName))  continue;   var result = await this.RoleManager.CreateAsync(new ApplicationRole(roleName));   if (!result.Succeeded)  throw new Exception(string.Join(Environment.NewLine, result.Errors.Select(v =gt; v.Description)));   this.Logger.LogInformation(@$"Seeding ""{roleName}"" role has been succesful.");  }  }  } public class AdminUserSeeder : BaseSeeder  {  public AdminUserSeeder(IServiceProvider serviceProvider, ILogger logger, IConfiguration config)  : base(serviceProvider, logger, config)  {  }   public override async Task SeedAsync(ApplDBContext dataBase, IServiceProvider serviceProvider, IConfiguration config)  {  if (await this.UserManager.FindByEmailAsync(this.AdminEmail) == null)  {  var adminUser = new ApplicationUser  {  UserName = "admin",  Email = this.AdminEmail,  EmailConfirmed = true,  PhoneNumber = " 35796842165",  PhoneNumberConfirmed = true,  CreatedOn = DateTime.Now,  };   var result = await this.UserManager.CreateAsync(adminUser, this.AdminPassword);   if (result.Succeeded)  await this.UserManager.AddToRoleAsync(adminUser, this.Roles.AdminRole);   this.Logger.LogInformation(@$"Seeding admin user has been successful");  }  }  }  

Это средство подачи данных, настроенное в классе запуска:

 public class DataSeeder : ISeeder  {  public async Task SeedAsync(ApplDBContext dataBase, IServiceProvider serviceProvider, IConfiguration config)  {  if (dataBase == null)  throw new ArgumentNullException(nameof(dataBase));   if (serviceProvider == null)  throw new ArgumentNullException(nameof(serviceProvider));   var logger = serviceProvider.GetServicelt;ILoggerFactorygt;().CreateLogger(typeof(DataSeeder));   var seeders = new Listlt;ISeedergt;()  {  new RoleSeeder(serviceProvider,logger,config),  new AdminUserSeeder(serviceProvider,logger,config),  };   foreach (var item in seeders) await item.SeedAsync(dataBase, serviceProvider, config);    await dataBase.SaveChangesAsync();  }   }  
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)  {   using (var serviceScope = app.ApplicationServices.CreateScope())  {  var dataBase = serviceScope.ServiceProvider.GetRequiredServicelt;ApplDBContextgt;();  new DataSeeder()  .SeedAsync(dataBase, serviceScope.ServiceProvider, this.configuration)  .GetAwaiter().GetResult();  }  

После создания пользователя и назначения ему роли администратора почему я получаю «Недопустимую попытку входа в систему» Это модель страницы входа в систему идентификации

Комментарии:

1. В вашем примере показано, что ваше имя пользователя есть admin , но ваше изображение предполагает, что вы пытаетесь войти с помощью адреса электронной почты.

2. Вы очень правы… Это работает.. Спасибо……