app.UseAuthentication();
这个中间件添加后,他会为HttpContext.User设置一个ClaimsPrincipal对象。里面有身份认证token里面携带的信息。
其访问方式如下
HttpContext.User.FindFirstValue("自定义字段")
我们可以创建一个服务,方便在应用中使用用户信息。
因为在服务中拿不到HttpContext,所以只能通过IHttpContextAccessor去拿HttpContext
HttpContextAccessor.HttpContext
但是IHttpContextAccessor也需要先注入到容器中,服务才能使用
builder.Services.AddHttpContextAccessor();
完成IHttpContextAccessor注入后,就可以创建一个用户信息服务
1 public interface ICurrentUser 2 { 3 string depart { get; } 4 string 自定义字段 { get; } 5 string 自定义字段2 { get; } 6 } 7 8 public class CurrentUser : ICurrentUser 9 { 10 //服务中拿不到HttpContext,只能通过IHttpContextAccessor去拿到服务中拿不到HTTPContext 11 public CurrentUser(IHttpContextAccessor httpContextAccessor) 12 { 13 HttpContextAccessor = httpContextAccessor; 14 } 15 16 private IHttpContextAccessor HttpContextAccessor { get; } 17 public string depart => HttpContextAccessor.HttpContext.User.FindFirstValue("testdepart");//=>只读初始化器语法糖 18 public string 自定义字段 => HttpContextAccessor.HttpContext.User.FindFirstValue("自定义字段"); 19 public string 自定义字段2 => HttpContextAccessor.HttpContext.User.FindFirstValue("自定义字段2"); 20 }
然后在容器中注入这个服务
builder.Services.AddScoped<ICurrentUser,CurrentUser>();
在控制器或其他服务中使用就通过构造注入就行
public WeatherForecastController(ICurrentUser currentUser) { CurrentUser = currentUser; }
我们在一个接口中返回这个对象
[HttpGet] public object GetCurrent() { return CurrentUser; }
结果如下
标签:ICurrentUser,HttpContextAccessor,string,自定义,IHttpContextAccessor,用户,认证,HttpConte From: https://www.cnblogs.com/ggtc/p/18167277