代码之家  ›  专栏  ›  技术社区  ›  BenjiFB

ASP.NET标识核心2:基于登录URL添加自定义声明

  •  0
  • BenjiFB  · 技术社区  · 7 年前

    我有一个ASP.NET核心应用程序,它实现了自定义UserClaimsPrincipalFactory,包括以下方法:

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

    这很有效。我可以检查用户的属性并动态地包含声明。

    但是我想添加一个单独的“管理员”登录端点,这样用户就可以决定在登录时是否需要管理员体验。我是否可以将有关当前会话的其他信息(例如登录URL或任何表单参数)传递给GenerateClaimsAsync方法?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Edward    7 年前

    用于从中访问请求信息 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;
        }
    }
    
    推荐文章