Мои собственные добавленные претензии иногда не сохраняются между двумя запросами - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь переопределить генерацию заявок в ядре 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?

...