如何使用Identity在ApplicationDbContext中获取当前登录的用户ID?

编程入门 行业动态 更新时间:2024-10-24 18:26:50
本文介绍了如何使用Identity在ApplicationDbContext中获取当前登录的用户ID?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我已使用Visual Studio中的模板创建了一个.Net core 2.1 MVC应用程序,其中带有标识预设(存储在应用程序中的用户帐户),并且我正在尝试自动执行某些审核字段。

基本上,我尝试做的是重写SaveChangesAsync()方法,以便每当对实体进行更改时,当前登录的用户ID都会设置为CreatedBy或ModifiedBy的审核属性,这些属性是作为实体的影子属性创建的。

我看过似乎成堆的答案,但令人惊讶的是,它们都不适用于我。我曾尝试注入IHttpContext、HttpContext、UserManager,但我似乎无法访问返回用户ID的方法,或者我收到了循环依赖错误,我不太明白为什么会发生这种情况。

这一次我真的要绝望了。我认为这样的事情应该很简单,但我真的很难弄清楚怎么做。似乎有针对Web API控制器或MVC控制器的有详细文档记录的解决方案,但没有在ApplicationDbContext中使用。

如果有人能帮助我,或者至少给我指个正确的方向,我将不胜感激,谢谢。

推荐答案

感谢所有答案。最后,我决定创建一个UserResolveService,它通过DI接收HttpConextAccessor,然后可以获取当前用户名。有了这个名字,我就可以查询数据库以获得我可能需要的任何信息。然后,我将此服务注入到ApplicationDbContext。

IUserResolveService.cs

public interface IUserResolveService { Task<string> GetCurrentSessionUserId(IdentityDbContext dbContext); }

UserResolveService.cs

public class UserResolveService : IUserResolveService { private readonly IHttpContextAccessor httpContextAccessor; public UserResolveService(IHttpContextAccessor httpContextAccessor) { this.httpContextAccessor = httpContextAccessor; } public async Task<string> GetCurrentSessionUserId(IdentityDbContext dbContext) { var currentSessionUserEmail = httpContextAccessor.HttpContext.User.Identity.Name; var user = await dbContext.Users .SingleAsync(u => u.Email.Equals(currentSessionUserEmail)); return user.Id; } }

您必须在启动时注册服务并将其注入到ApplicationDbContext中,您可以这样使用它:

ApplicationDbConext.cs

var dbContext = this; var currentSessionUserId = await userResolveService.GetCurrentSessionUserId(dbContext);

更多推荐

如何使用Identity在ApplicationDbContext中获取当前登录的用户ID?

本文发布于:2023-11-16 20:49:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1607411.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何使用   用户   ApplicationDbContext   Identity   ID

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!