I use .net core 3.1.6. There are lots of answer about this and I try all but failed each time. So I create new test MVC project and add authentication.
I try to use a "CurrentUserService" class and get logged user information. However, every each time I get null result.
My startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddHttpContextAccessor(); services.AddScoped<ICurrentUserService, CurrentUserService>(); services.AddControllersWithViews(); services.AddRazorPages(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapRazorPages(); }); } And my CurrentUserService.cs
public class CurrentUserService : ICurrentUserService { private IHttpContextAccessor _httpContextAccessor; public CurrentUserService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; //I add x for test purpose and there is no user information here. var x = _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier); } public string UserId { get { var userIdClaim = _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier); return userIdClaim; } } public bool IsAuthenticated => UserId != null; } ICurrentUser.cs
public interface ICurrentUserService { string UserId { get; } bool IsAuthenticated { get; } } DbContext.cs
public class ApplicationDbContext : IdentityDbContext { private readonly ICurrentUserService _currentUserService; public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public ApplicationDbContext( DbContextOptions<ApplicationDbContext> options, ICurrentUserService currentUserService) : base(options) { _currentUserService = currentUserService; } } 
