【问题标题】:Claims in IHttpContextAccessor are emptyIHttpContextAccessor 中的声明为空
【发布时间】:2020-06-11 09:05:58
【问题描述】:

在我的 .net 核心 mvc 应用程序中,我尝试在我的用户服务中获取用户声明。但声明列表为空。

public class CurrentUserService : ICurrentUserService
{
    public CurrentUserService(IHttpContextAccessor httpContextAccessor)
    {
        UserId = httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier);
    }
    public string UserId { get; }
}

但在页面中有声明。有什么区别?

配置服务:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultUI();

        services.AddHttpContextAccessor();
        services.AddScoped<ICurrentUserService, CurrentUserService>();
        services.AddTransient<IEmailSender, EmailSender>();
        services.Configure<EmailOptions>(options =>
        {
            Configuration.GetSection("Email").Bind(options);
        });
        services.AddPingIdentity(Configuration);
        services.AddApplication();
        services.AddInfrastructure(Configuration);

        services.AddConfiguredRazorPages();
    }

【问题讨论】:

  • 这取决于你在哪里以及如何调用你的服务,是通过网络请求吗?
  • 我将服务注入 ApplicationDbContext 和中介命令中。在这两种情况下都没有索赔
  • 你的信息不全,可能是你在UseMvc之后调用app.UseAuthentication
  • 我用我的配置方法添加了一个截图

标签: c# asp.net-core-mvc openid-connect


【解决方案1】:

问题在于 CurrentUserService 在 Authentication 中间件设置 HttpContext.User 的声明之前由依赖注入框架实例化。由于在CurrentUserService 的构造函数中访问了HttpContext.User(使用IhttpContextAccessor),因此声明尚不可用。

一个潜在的解决方案是在访问ICurrentUserService 的UserId 属性时访问HttpContext.User 属性。

public class CurrentUserService : ICurrentUserService
{
    private readonly IHttpContextAccessor httpContextAccessor;
    public CurrentUserService(IHttpContextAccessor httpContextAccessor)
    {
        this.httpContextAccessor = httpContextAccessor;
    }
    public string UserId => httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-04
    • 2021-05-10
    • 2022-07-07
    • 2015-05-08
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多