#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. Вы очень правы… Это работает.. Спасибо……