![](/img/trans.png)
[英]Identity UserManager CreateAsync does not write to database
[英]When does Identity's UserManager not support lockouts?
ASP.NET Core Identity 有UserManager.SupportsUserLockout()
,這對我來說是真的。
描述:
獲取一個標志,該標志指示后備用戶存儲是否支持用戶鎖定。
用戶管理器是否有可能不支持鎖定?
用戶管理器是否有可能不支持鎖定?
是的
在這兩種情況中的任何一種情況下:
UserManager<TUser>
被子類化並且virtual bool SupportsUserLockout
屬性被覆蓋並且該實現返回false
。UserManager<TUser>.Store
(您的IUserStore<TUser>
實現)沒有實現可選的IUserLockoutStore<TUser>
接口。IUserStore
實現(並且沒有子類化UserManager<TUser>
),那么您的運行時IUserStore<TUser>
將是abstract class UserStoreBase<...>
確實實現IUserLockoutStore<TUser>
。
IUserLockoutStore<TUser>
接口實現的Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore
。UserManager<TUser>
那么你將不能使用子類UserStoreBase<>
作為重新實現IUserStore<>
的基礎 - 基本上,您必須從頭開始。
UserManager
和UserStoreBase<...>
是一個糟糕的 OOP 設計,因為它需要通過大量的努力來實現 go 以正確地不支持某些東西,而不是讓一切都選擇加入。class Derived
父類class Base: ISomeInterface
的子類,這樣class Derived
不再實現ISomeInterface
(我們能做的最好的事情就是濫用隱式轉換為單獨的類型,或者使用[EditorBrowsable]
“隱藏”成員並使用throw new NotSupportedException()
顯式重新實現接口throw new NotSupportedException()
,這太可怕了,但即使是 Microsoft 在 .NET 的基礎庫中的某些地方也會這樣做,例如在Stream
和TextWriter
子類中)。 1 :“接口”不是指interface
類型; 我的意思是class
或struct
的一組public
成員,即類型的公開表面。
(在我的帖子的早期編輯中,我建議IConfigureOptions<LockoutOptions>
可用於配置SupportsUserLockout
,但是我錯了:因為沒有選項可以完全禁用鎖定系統,但是如果您要將兩個LockoutOptions
子類化以添加一個bool Enabled
屬性和子類UserManager<TUser>
以指定override bool SupportsUserLockout
以返回LockoutOptions.Enabled
(理想情況下,來自不可變副本,而不是原始可變選項 object )然后就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.