我正在为应用程序添加一个用户管理器模块。它有一个数据库,这个数据库有一个用户表和一个用户声明表,这样每个用户都可以有多个声明。但是,当我使用usermanager获取Users时。ToList()每个用户的声明集合都设置为0个条目,即使有问题的用户在用户声明表中确实列出了声明。
对我来说,出于某种原因,仅仅做用户管理器似乎是显而易见的。用户。Tolist()不会导致代码查阅用户声明表来检查每个用户拥有哪些声明。
因此,问题是在哪里以及如何插入能够做到这一点的代码。
现有代码的一些潜在问题:1.他们创建了IdentityUser的子类,因此UserManager被定义为该子类的用户管理器。但用户管理器并没有明确的子类。为此,我正在考虑创建UserManager的子类,如果是这样的话,我可以覆盖Users属性,这样读取Users列表就可以用该用户的声明填充每个用户条目。这听起来像是一种干净的方式吗?
- 在其他一些堆栈溢出问题中,我看到了对Startup的引用。Auth.cs文件。我们有一个Startup.cs文件,但没有Startup。Auth.cs文件,我们应该制作一个吗
提前感谢您的任何意见。
如果您使用ASP。Net标识模板当你创建项目时,你必须有一个启动。Auth.cs,它可以隐藏为Startup.cs的子文件,也可以隐藏在App_Start文件夹等中
如果试图绕过UserManager
,当您向EF请求用户时,请确保.Include(...)
是索赔属性。例如:
dbcontext.Users.Include(u => u.Claims).FirstOrDefault(...);
更好的是,您应该使用UserManager
:
var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var claims = userManager.GetClaims(userId);