[英].NET core Web API: Get currently logged in user outside of controller - Database First approach
我需要让当前登录的用户在 controller 之外进行审计日志记录。 我在 .NET 核心 3.1 API 项目中使用数据库优先方法。 这就是为什么我创建了一个新的上下文 class 派生自 MyContext class 来处理审计的原因。 在这里,我现在想获取用户信息。 我使用 JWT 基于声明的身份验证。
在下面的 class“ MyNewContext ”中,我将IHttpContextAccessor添加到 Startup.cs( services.AddHttpContextAccessor();
)以在“ MyNewContext ” class 中使用它,但是当调用构造函数时,用户或声明对象是空的。
当在 controller 中使用 IHttpContextAccessor 时,我似乎只能获得用户 object。 此外,如果我为 IHttpContextAccessor 创建服务 class,则在 controller 内调用时,它只有用户 object。
public class MyNewContext : MyContext
{
private static string _userGuid;
private readonly IHttpContextAccessor _httpContextAccessor;
public MyNewContext(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
GetUserGuid();
}
public void GetUserGuid()
{
_userGuid = _httpContextAccessor.HttpContext?.User?.FindFirst("unique_name")?.Value;
}
}
启动.cs
services.AddHttpContextAccessor();
services.AddDbContext<MyNewContext>(x => x.UseSqlServer(Configuration["ConnectionStrings:xyz"]));
我究竟做错了什么? 还有其他获取用户信息的方法吗?
谢谢你。
在我的 startup.cs 中,我有 AddJwtBearer 功能。
在那里,我现在只需将 guidClaim 值传递给 MyNewContext 中的 SetGuid function。 不需要 IHttpContextAccessor。
Claim guidClaim = (context.Principal.Identity as ClaimsIdentity).FindFirst("unique_name");
MyNewContext.SetGuid(guidClaim.Value);
这对我有用 - 现在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.