#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. Ладно, ты прав! Большое вам спасибо, спасите мой день!