User.IsInRole не работает при первой загрузке страницы индекса, но работает после обновления страницы - PullRequest
0 голосов
/ 16 января 2020

У меня есть приложение, использующее. net идентификатор ядра (3.0) и роли. на странице Index.cs html я использую User.IsInRole для отображения различного контента в зависимости от ролей. Я использовал для проверки подлинности формы и все работает после входа пользователя. Сейчас я пытаюсь перейти на встроенную windows аутентификацию. В Startup.cs я добавил в ConfigureServices

services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

services.AddAuthentication(IISDefaults.AuthenticationScheme);

в Configure, я использую

app.UseAuthentication();
app.UseAuthorization();

При первой загрузке страницы индекса она проходит аутентификацию windows, но не получает роли, поэтому страницы не будут отображаться правильно. Но последующее посещение страницы (например, если я обновлю sh страницу) загрузит роли и отобразит страницу правильно.

Редактировать Я впервые заметил, что при загрузке страницы индекса, User.Identity имеет AuthenticationType = "Negotiate", а User.Identity - это WindowsIdentity, после обновления страницы User.Identity - это ClaimsIdentity, а AuthenticationType был изменен на "Identity.Application". Поэтому мне кажется, что при первой загрузке не было идентификатора windows, преобразованного в идентификатор приложения. Я добавил

string id = await _userManager.FindByNameAsync(User.Identity.Name.Split('\\').Last()).Id;
appUser = await _userManager.FindByIdAsync(id);
appUser.Roles = await _userManager.GetRolesAsync(appUser);
appUser.Roles = (from string item in appUser.Roles orderby item select item).ToList();
await _signInManager.SignInAsync(appUser, false);

Результат тот же. Есть ли способ заменить текущего пользователя на пользователя SignedIn (в данном случае appUser)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...