2017-03-09 49 views
0

我正在爲應用程序添加用戶管理器模塊。它有一個數據庫,這個數據庫有一個用戶表和一個用戶聲明表,以便每個用戶可以有多個聲明。但是,當我使用usermanager來獲取Users.ToList()時,即使有問題的用戶確實在用戶聲明表中列出了聲明,每個用戶都會將其聲明集合設置爲0條目。所有用戶的.NET #claims == 0

看起來很明顯,出於某種原因,只是做usermanager.Users.Tolist()不會導致代碼查閱用戶聲明表以檢查每個用戶擁有哪些聲明。

所以問題是在哪裏以及如何插入完全相同的代碼。

現有代碼的一些潛在問題: 1.他們已經創建了IdentityUser的一個子類,因此UserManager被定義爲該子類的用戶管理者。但是沒有usermanager的顯式子類。我正在考慮爲此目的創建UserManager的子類,如果是這樣的話,我可以重寫Users屬性,以便讀取用戶列表使其爲用戶填充每個用戶條目。這聽起來像是一個乾淨的做法嗎?

  1. 在其他一些堆棧溢出問題中,我看到對Startup.Auth.cs文件的引用。我們有一個Startup.cs文件,但沒有Startup.Auth.cs文件,我們應該創建一個嗎?

非常感謝您的任何意見。

回答

0

如果您在創建項目時使用了ASP.Net標識模板,則必須具有Startup.Auth.cs,它可以隱藏爲Startup.cs的子文件或App_Start文件夾等。

如果試圖繞過UserManager,當您從EF請求您的用戶時,請確保您的.Include(...)屬性爲claim。例如:

dbcontext.Users.Include(u => u.Claims).FirstOrDefault(...); 

更重要的是,你應該使用UserManager

var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
var claims = userManager.GetClaims(userId);