在身份认证后建立用户对象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;
}

结果如下

 

posted @   ggtc  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
//右下角目录
点击右上角即可分享
微信分享提示