ASP.NET Identity Core 2: добавить пользовательское утверждение на основе URL-адреса входа - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть основное приложение ASP.NET, которое реализует пользовательский UserClaimsPrincipalFactory, включая следующий метод:

protected override async Task<ClaimsIdentity> GenerateClaimsAsync(TUser user)

Это работает хорошо.Я могу проверять атрибуты пользователя и динамически включать заявки.

Но я хотел бы добавить отдельную конечную точку входа в систему с правами администратора, чтобы пользователи могли решать, предпочитают ли они опыт администратора при входе в систему.в. Могу ли я передать дополнительную информацию о текущем сеансе (например, URL-адрес входа или любые параметры формы) в метод GenerateClaimsAsync?

1 Ответ

0 голосов
/ 05 декабря 2018

Для доступа к информации запроса от UserClaimsPrincipalFactory, вы можете зарегистрировать IHttpContextAccessor, как показано ниже:

    public class CustomUserClaimsPrincipalFactory<TUser> : UserClaimsPrincipalFactory<TUser> where TUser : class
{
    private readonly HttpContext _httpContext;
    public CustomUserClaimsPrincipalFactory(UserManager<TUser> userManager
        , IOptions<IdentityOptions> optionsAccessor
        ,IHttpContextAccessor httpContextAccessor) 
        : base(userManager, optionsAccessor)
    {
        _httpContext = httpContextAccessor.HttpContext;
    }
    protected override async Task<ClaimsIdentity> GenerateClaimsAsync(TUser user)
    {
        var ci = await base.GenerateClaimsAsync(user);
        ci.AddClaim(new Claim("RequestPath", _httpContext.Request.Path.Value));
        return ci;
    }
}
...