作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 DDD 构建了我的项目,它看起来像这样:
| CompanyName.API
| MyControllerThatRequiresJwtToken << Entry point
| CompanyName.Application
| CompanyName.Data
| EfCoreContext << I would like to get the claims here
| CompanyName.Domain
| CompanyName.IoC
| CompanyName.Test
| CompanyName.UI
public override int SaveChanges()
{
var audit = new Audit();
audit.CreatedBy = "JWT Username"; // << I'd need it here
audit.PreSaveChanges(this);
var rowAffecteds = base.SaveChanges();
audit.PostSaveChanges();
if (audit.Configuration.AutoSavePreAction != null)
{
audit.Configuration.AutoSavePreAction(this, audit);
base.SaveChanges();
}
return rowAffecteds;
}
最佳答案
例如,创建一个名为 IApplicationUser 的接口(interface)。给它提供你需要的只读属性,比如 id、name 等等。
创建它的实现
public class ApplicationUser : IApplicationUser
{
private readonly IHttpContextAccessor httpContextAccessor;
public ApplicationUser(IHttpContextAccessor httpContextAccessor)
{
this.httpConntextAccessor = httpContextAccessor;
}
public Guid Id => this.GetUserId();
public string Name => this.GetUserName();
private Guid GetUserId()
{
var subject = this.httpContextAccessor.HttpContext
.User.Identity.Claims
.FirstOrDefault(claim => claim.Type == JwtClaimTypes.Subject);
return Guid.TryParse(subject, out var id) ? id : Guid.Empty;
}
private Guid GetUserId()
{
return this.httpContextAccessor.HttpContext
.User.Identity.Claims
.FirstOrDefault(claim => claim.Type == JwtClaimTypes.PreferredUserName);
}
}
services.AddScoped<IApplicationUser, ApplicationUser>();
services.AddScoped<IHttpContextAccessor, HttpContextAccessor>();
关于c# - 如何在类库中访问 JWT User.Claims,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52050501/
我是一名优秀的程序员,十分优秀!