Можно ли создать некоторых предварительно зарегистрированных пользователей при переходе в базу данных аутентификации в ASP.NET/Blazor проект?

#asp.net #sql-server #asp.net-core #blazor #blazor-server-side

Вопрос:

Интересно, можно ли добавлять пользователей и пароли без необходимости регистрировать их в форме. У меня есть существующая база данных с некоторыми пользователями и паролями, и я хочу перенести ее туда aspNetUser .

Я перенес эти таблицы по умолчанию в локальную базу данных, и я не понимаю, как установить около 10 существующих пользователей только с паролями в этих таблицах.

Я хочу только «вставить» пользователей и пароли.

Я использую шаблон сервера Blazor с включенной индивидуальной аутентификацией.

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

1. ДА. Но без кода никто не может предложить ничего, кроме общих советов. Обновите свой вопрос с учетом существующей структуры базы данных, и мы сможем предоставить вам лучший ответ.

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

Ответ №1:

Да, вы можете сделать это, но вручную, как начальное значение для вашей базы данных.
Вы можете сделать что-то подобное:

 public class AppIdentityDbContextSeed  {  public static async Task SeedAsync(UserManagerlt;IdentityUsergt; userManager, RoleManagerlt;IdentityRolegt; roleManager)  {  await roleManager.CreateAsync(new IdentityRole("Administrators"));   var defaultUser = new IdentityUser { UserName = "your username", Email = "your email" };  await userManager.CreateAsync(defaultUser, "your password");   string adminUserName = "Your admin name";  var adminUser = new IdentityUser { UserName = adminUserName, Email = "your admin email" };  await userManager.CreateAsync(adminUser, "your admin password");  adminUser = await userManager.FindByNameAsync(adminUserName);  await userManager.AddToRoleAsync(adminUser, "Administrators");  }  }  

Затем вы можете использовать SeedAsync метод в своем program классе, как показано ниже:

 public class Program  {  public static async Task Main(string[] args)  {  var host = CreateHostBuilder(args)  .Build();   using (var scope = host.Services.CreateScope())  {  var services = scope.ServiceProvider;  try  {    var userManager = services.GetRequiredServicelt;UserManagerlt;IdentityUsergt;gt;();  var roleManager = services.GetRequiredServicelt;RoleManagerlt;IdentityRolegt;gt;();  await AppIdentityDbContextSeed.SeedAsync(userManager, roleManager);  }  catch (Exception ex)  {  //exception handling  }  }   host.Run();  }   public static IHostBuilder CreateHostBuilder(string[] args) =gt;  Host.CreateDefaultBuilder(args)  .ConfigureWebHostDefaults(webBuilder =gt;  {  webBuilder.UseStartuplt;Startupgt;();  });  }  

Наконец, проверьте Startup.cs , все должно быть так, как показано ниже:

 services.AddDefaultIdentitylt;IdentityUsergt;().AddRoleslt;IdentityRolegt;()  .AddEntityFrameworkStoreslt;ApplicationDbContextgt;();  

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

1. Хорошо, я попробовал, но мой dbo. AspNetUsers остается пустым. Я, наверное, что-то упускаю…

2. Извините, это была моя ошибка. Я обновил ответ. Это должно быть IdentityUser вместо ApplicationUser . Также проверьте Startup.cs , как я уже упоминал в ответе.

3. Спасибо! но я попробовал ваш код, он добавляет только роль администратора в таблицу AspNetRoles, пользователей в ApsNetUsers нет

4. Я попробовал, и он правильно добавил пользователей, может быть, вам нужно передать действительные пароли, для AspNetUsers которых есть прописные буквы и цифры, а также действительные электронные письма? попробуйте эти учетные данные и дайте мне знать , работает это или нет UserName = "user" , Email = "user@gmail.com" , password="P@ssword1"

5. Ладно, ты прав! Большое вам спасибо, спасите мой день!