使用user.Emailvs 有await _userManager.GetEmailAsync(user)什么區別?
我的意思是,一旦我擁有了用戶實體本身,那么以該用戶實體為引數的_userManager'sGetEmailAsync()方法有什么用?我可以通過其屬性訪問用戶的電子郵件。
我檢查了源代碼,我確實知道有一個 using 抽象層,IUserEmailStore但它的默認實作只是回傳 Email 屬性......
我也明白,可能存在其他實作,IUserEmailStore但在這種情況下會出現問題:user.Email屬性和_userManager.GetEmailAsync(user) 彼此是否一致,或者不是?
如果不是,那就是一個問題,如果是,那么我們又回到最初的問題:使用_userManager.GetEmailAsync(user)的用例是什么?
(同樣的問題涉及用戶名、電話號碼等屬性)
uj5u.com熱心網友回復:
使用
user.Emailvs 有await UserManager.GetEmailAsync(user)什么區別?
user.Email僅當您首先TUser實際擁有Email房產時才有效。- 有趣的事實:ASP.NET-Core-Identity 實際上并不需要
class你使用的任何東西TUser來擁有一個String Email屬性。- 即您的假設(用戶有電子郵件地址)實際上并沒有在 ASP.NET-Core-Identity 中得到保證,也沒有被要求。
- ASP.NET-Core-Identity 對 的唯一約束
TUser是TUser : class,因此如果您足夠勇敢,您甚至可以使用String或。IDictionaryTUser- 雖然 ASP.NET-Core-Identity確實有一個
String Email { get; }僅在 上定義的屬性class Microsoft.AspNetCore.Identity.IdentityUser<TKey>,但您根本沒有義務使用此類:它只是一個預先撰寫的實作,涵蓋了最常見的用例并且(可能)通過以下方式節省了大多數人的時間讓他們子類化它。
- 雖然 ASP.NET-Core-Identity確實有一個
- 有趣的事實:ASP.NET-Core-Identity 實際上并不需要
但還有其他情況需要考慮:
- ...例如域模型設計,其中用戶每個用戶有多個電子郵件地址,在這種情況下,具有單個標量
String Email { get; }屬性根本不起作用......盡管兩者都GetEmailAsync不會,但這是 ASP.NET 的另一部分-核心標識的設計,你錯過了:你可以實作IUserStore<TUser>和未實作IUserEmailStore<TUser>,那么就不會有任何的Email財產,也沒有一個GetEmailAsync方法。(只要確保你沒有子類化class UserStoreBase),而是從頭開始構建你的商店實作。- 在這個假設的情況下,沒有型別實作
IUserEmailStore<TUser>,代碼庫中的任何地方都不會有任何方法必須拋出NotImplementedException或NotSupportedException。這是一件好事:設計領域模型時的一個常見口頭禪是“使無效的事情變得不可能”(這是我對原始格言“使無效狀態不可表示”的破壞)。
- 在這個假設的情況下,沒有型別實作
- ...例如域模型設計,其中用戶每個用戶有多個電子郵件地址,在這種情況下,具有單個標量
另一種情況是一些(非典型的,我承認)系統,其中用戶確實有電子郵件地址,但它沒有存盤或由記憶體
User物件表示,在這種情況下,您必須使用 的自定義實作GetEmailAsync來獲取用戶的電子郵件地址每次。- 我想這在使用具有極其細粒度安全性的后端用戶存盤時可能是一種可能性(例如,某些偏執的 Active Directory 設定,其中當前
Thread的 NT 安全令牌用于證明從 請求電子郵件地址的權限)目錄......但這個想法只是猜測,我希望沒有人真正支持這一點,至少在手頭沒有好的血壓藥物的情況下不會)。
- 我想這在使用具有極其細粒度安全性的后端用戶存盤時可能是一種可能性(例如,某些偏執的 Active Directory 設定,其中當前
結論:并非每個系統都有用戶電子郵件地址,而且 ASP.NET Core Identity 不需要他們公開它們- ASP.NET Core Identity的(誠然非常復雜)設計反映了這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/397526.html
標籤:asp.net核心
