我正在努力将一个用户管理器模块添加到应用程序中。它有一个数据库,这个数据库有一个用户表和一个用户声明表,这样每个用户都可以拥有多个声明。但是,当我使用usermanager获取Users.ToList()时,即使相关用户确实在用户声明表中列出了声明,每个用户的声明集也设置为0个条目。
对我来说,显而易见的是,由于某种原因,只使用usermanager.Users.Tolist()不会导致代码查询用户声明表以检查每个用户拥有的声明。
所以问题是在哪里以及如何插入完全相同的代码。
现有代码存在一些潜在问题: 1.他们创建了IdentityUser的子类,因此UserManager被定义为该子类的用户管理器。但是没有用户管理器的显式子类。我正在考虑为此目的创建UserManager的子类,如果是这样,我可以覆盖Users属性,以便读取Users列表导致它使用该用户的声明填充每个用户条目。这听起来像干净的方式吗?
提前感谢您的任何意见。
答案 0 :(得分:0)
如果在创建项目时使用了ASP.Net标识模板,则必须具有Startup.Auth.cs,可以将其隐藏为Startup.cs的子文件,也可以隐藏在App_Start文件夹等中。 / p>
如果您尝试绕过UserManager
,当您从EF请求您的用户时,请确保.Include(...)
声明属性。例如:
dbcontext.Users.Include(u => u.Claims).FirstOrDefault(...);
更好的是,您应该使用UserManager
:
var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var claims = userManager.GetClaims(userId);