所有用户都使用.NET #claims == 0

时间:2017-03-09 08:56:29

标签: c# .net asp.net-identity

我正在努力将一个用户管理器模块添加到应用程序中。它有一个数据库,这个数据库有一个用户表和一个用户声明表,这样每个用户都可以拥有多个声明。但是,当我使用usermanager获取Users.ToList()时,即使相关用户确实在用户声明表中列出了声明,每个用户的声明集也设置为0个条目。

对我来说,显而易见的是,由于某种原因,只使用usermanager.Users.Tolist()不会导致代码查询用户声明表以检查每个用户拥有的声明。

所以问题是在哪里以及如何插入完全相同的代码。

现有代码存在一些潜在问题: 1.他们创建了IdentityUser的子类,因此UserManager被定义为该子类的用户管理器。但是没有用户管理器的显式子类。我正在考虑为此目的创建UserManager的子类,如果是这样,我可以覆盖Users属性,以便读取Users列表导致它使用该用户的声明填充每个用户条目。这听起来像干净的方式吗?

  1. 在其他一些堆栈溢出问题中,我看到了对Startup.Auth.cs文件的引用。我们有一个Startup.cs文件但没有Startup.Auth.cs文件,我们应该制作一个吗?
  2. 提前感谢您的任何意见。

1 个答案:

答案 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);