Совершенно новый для ASP.Net Core.Необходимость создания проекта ядра 2.2 для asp.net с идентификацией (и просеивания пользователей).
Я не могу найти никакой документации о том, как это сделать точно.
Мне удалось найтикод для создания Identity Roles (все равно компилируется, еще не дошел до того места, где я могу его запустить:
private static async Task CreateUserTypes(ApplicationDbContext authContext, IServiceProvider serviceProvider)
{
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
string[] roleNames = { "Administrator", "Data Manager", "Interviewer", "Respondent" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
var roleExist = await RoleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
}
}
}
Теперь мне нужно создать несколько пользователей. Но для этого нужен странный синтаксис MicrosoftЯ не могу найти (гуглил 2 дня).
Вот что работает не :
private static async Task CreateRootUser(Models.CensORContext context, ApplicationDbContext authContext, IServiceProvider serviceProvider)
{
//Create the root ADMIN user for all things admin.
UserManager<ApplicationDbContext> userManager = serviceProvider.GetRequiredService<UserManager<ApplicationDbContext>>();
IdentityUser user = new IdentityUser()
{
UserName = "admin@admin.admin",
Email = "admin@admin.admin"
};
var NewAdmin = await userManager.CreateAsync(user, "password");
}
Я вижу ошибку:
Аргумент 1: невозможно преобразовать из «Microsoft.AspNetCore.Identity.IdentityUser» в «ApplicationDbContext»
Означает ли это? Очевидно, у меня нет нужного userManager. Но, как мне получить правильный , который принимает пользователя в качестве 1-го параметра и строку (пароль) для 2-го?
Кроме того, примеры, которые появляются в поисках Google, имеют ApplicationUser
объект, которого у меня нет (и не нужен?). Не определено вдостаточно о том, как я получаю это.
Оуэн
ОК.Получил синтаксическую ошибку, но теперь я получаю ошибку времени выполнения:
NullReferenceException: Ссылка на объект не установлена на экземпляр объекта.по вызову CreateAsync.Вот новый код:
private static async Task CreateRootUser(Models.CensORContext context, ApplicationDbContext authContext, IServiceProvider serviceProvider)
{
//Create the root ADMIN user for all things admin.
var userStore = new UserStore<IdentityUser>(authContext);
UserManager<IdentityUser> userManager = new UserManager<IdentityUser>(userStore, null, null, null, null, null, null, serviceProvider, null);
// = serviceProvider.GetRequiredService<UserManager<ApplicationDbContext>>();
IdentityUser user = new IdentityUser()
{
UserName = "admin@admin.admin",
Email = "admin@admin.admin"
};
var result = await userManager.CreateAsync(user, "password");
}
Собираемся узнать, какие другие параметры есть для создания userManager и как их получить из serviceProvider?
- Оуэн
Разобрался, как это сделать.Ключ находил правильный сервис-провайдер для передачи и правильного синтаксиса для создания userManager.Другие ответы, которые я нашел через Google все , заменили IdentityUser
их собственными ApplicationUser
, которые мутили воду.Вот рабочая функция (надеюсь, это кому-нибудь поможет):
private static async Task CreateRootUser(Models.CensORContext context, ApplicationDbContext authContext, IServiceProvider serviceProvider)
{
//Create the root ADMIN user for all things admin.
var userStore = new UserStore<IdentityUser>(authContext);
UserManager<IdentityUser> userManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
//new UserManager<IdentityUser>(userStore, null, null, null, null, null, null, serviceProvider, null);
// = serviceProvider.GetRequiredService<UserManager<ApplicationDbContext>>();
IdentityUser user = new IdentityUser()
{
UserName = "admin@admin.admin",
Email = "admin@admin.admin"
};
var result = await userManager.CreateAsync(user, "password");
result = await userManager.AddToRoleAsync(user, "Administrator");
}