簡體   English   中英

使用userManager的.NET Core身份並加載其他ApplicationUser屬性

[英].NET Core Identity using userManager and load additional ApplicationUser properties

我的問題基於此處的主題但是由於不允許在此處添加評論,我想我必須打開一個新線程。

在我的ASP.NET Core后端中,我正在使用ASP.NET Core身份進行用戶管理。 它在所謂的用戶管理器的幫助下提供了用於用戶身份驗證的方法。

現在,我一方面無法使用用戶管理器中的方法,另一方面卻無法加載自定義的Application User屬性。

方案如下:前端通過MVC控制器(HTTP請求)發送包含電子郵件地址和密碼的登錄dto。 現在,我想使用用戶管理器提供的FindByEmailAsync方法加載應用程序用戶。 我將此方法包裝在一個自制的應用程序用戶存儲庫中,在該存儲庫中,用戶管理器是通過依賴項注入來注入的,並且還可以訪問應用程序上下文。 由於用戶管理器在加載用戶管理器時不會加載自定義屬性,因此我也必須做一些額外的工作來加載這些屬性。

我首先嘗試通過上下文(而不是通過用戶管理器)完全加載用戶。 效果很好,其他屬性也可以加載。 隨后嘗試使用usermanager.CheckPasswordAsync方法時,問題開始。 我有一個例外:

“無法跟蹤實體ApplicationUser的實例,因為已經跟蹤了另一個具有相同鍵值的id的實例”。

我認為這是由於一方面使用上下文加載用戶,而另一方面使用用戶管理器執行checkPassword 然后,我嘗試使用FindByEmailAsyncusermanager加載用戶。 一切正常,沒有異常,但是自定義屬性尚未加載。 在我上面鏈接的線程中,有一些建議,但是沒有一個對我有用。

  1. 建議:

     var user = await userManager.Users .Include(x => x.Address) .SingleAsync(x => x.NormalizedEmail == email); 

userManager.UsersIQueryable<Users> ,並且不包含Include方法。

  1. 建議:

     await context.Entry(user).Reference(x => x.Address).LoadAsync(); 

在我的情況下,自定義屬性(Certificates)是一個集合,因此我使用.Collection而不是.Reference ,但是出現以下錯誤:

“無法加載類型為'ApplicationUser'的實體上的導航屬性'Certificates',因為該實體未被跟蹤。只能為跟蹤的實體加載導航屬性。“

有人建議如何使用用戶管理器提供的方法,並向應用程序用戶包括自定義屬性嗎?

謝謝!

我遇到了同樣的問題,並注意到當您訪問自定義屬性之前加載DbContext時,它可以工作

var user = await userManager.Users;
_context.Users.Include(u => u.Address).FirstOrDefault(x => x.NormalizedEmail == email);

var adress = user.Address;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM