services.AddAuthentication(option => {
option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
option.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options => {
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"]))
};
});
public class UserContextMiddleware
{
private readonly RequestDelegate _next;
private readonly UserManager
public UserContextMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context, UserManager userManager)
{
_userManager = userManager;
if (context.User.Identity.IsAuthenticated)
{
var userName = context.User.Identity.Name;
var user = await _userManager.FindByNameAsync(userName);
if (user != null)
{
context.Items["User"] = user;
}
}
await _next(context);
}
}
public class ApplicationDbContext : DbContext { private readonly IHttpContextAccessor httpContextAccessor;
public ApplicationDbContext(DbContextOptions options, IHttpContextAccessor httpContextAccessor)
: base(options)
{
this.httpContextAccessor = httpContextAccessor;
}
public override int SaveChanges()
{
AddAuditInfo();
return base.SaveChanges();
}
public override async Task SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
AddAuditInfo();
return await base.SaveChangesAsync(cancellationToken);
}
private void AddAuditInfo()
{
var username = httpContextAccessor.HttpContext.Items["User"] !=