Я пытаюсь переопределить генерацию заявок в ядре asp.net.И иногда он генерировал простые претензии без моих пользовательских добавленных в UserClaimsPrincipalFactory
public class ClaimsPrincipalFactory: UserClaimsPrincipalFactory<ApplicationUser, ApplicationRole>
{
private readonly IUserReader _userReader;
private readonly IRolesClaimPrincipalHelper _roleClaimsPrincipal;
public ClaimsPrincipalFactory(
UserManager<ApplicationUser> userManager,
RoleManager<ApplicationRole> roleManager,
IOptions<IdentityOptions> optionsAccessor,
IUserReader userReader,
IRolesClaimPrincipalHelper claimPrincipalHelper)
: base(userManager, roleManager, optionsAccessor)
{
_userReader = userReader;
_roleClaimsPrincipal = claimPrincipalHelper;
}
public async override Task<ClaimsPrincipal> CreateAsync(ApplicationUser user)
{
var id = await GenerateClaimsAsync(user);
return new ClaimsPrincipal(id);
}
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(ApplicationUser user)
{
var id = await base.GenerateClaimsAsync(user);
var userWithRoles = _userReader.FindByEmail(user.Email);
var rolesPerSubscription = _userReader.GetRolesPerSubscription(userWithRoles);
var rolesPerSubscriptionClaims = _roleClaimsPrincipal.GetClaims(rolesPerSubscription);
if (rolesPerSubscriptionClaims.Any())
{
id.AddClaims(rolesPerSubscriptionClaims);
if (rolesPerSubscription.Any(x => x.Roles.Contains(RoleHelper.MobileWorker)))
{
id.AddClaim(new Claim(Options.ClaimsIdentity.RoleClaimType, RoleHelper.MobileWorker));
}
}
return id;
}
}
Так что заявки нужно генерировать для каждого запроса
if (rolesPerSubscriptionClaims.Any())
{
id.AddClaims(rolesPerSubscriptionClaims);
if (rolesPerSubscription.Any(x => x.Roles.Contains(RoleHelper.MobileWorker)))
{
id.AddClaim(new Claim(Options.ClaimsIdentity.RoleClaimType, RoleHelper.MobileWorker));
}
}
Но иногда дополнительные заявки просто не генерируются, поэтому заявки по умолчаниюв порядке, но мой обычай пропущен.Я проверил, что все требования для сгенерированных моих пользовательских требований и требований выполняются при каждом запросе.Так что я действительно не понимаю, как это выборочно пропускает мои пользовательские претензии.Я зарегистрировал фабрику утверждений в соответствии с учебными пособиями, главное, что в некоторых запросах мои пользовательские утверждения просто пропускаются.Кто-нибудь сталкивался с такой же проблемой с Asp.Net Identity?