在身份认证后建立用户对象ICurrentUser
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; }
结果如下
分类:
net / webapi
标签:
ICurrentUser
, 身份验证
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!