簡體   English   中英

ASP.NET Core Identity 中刪除登錄用戶的策略

[英]Strategies for deleting a logged-in user in ASP.NET Core Identity

在我的 ASP.NET Core MVC 應用程序中,管理員可能希望從他們的組織中刪除一個普通用戶。 使用UserManager<T>.DeleteAsync()方法,這當然是微不足道的。

但是,用戶可能同時在多個設備上登錄。 我不需要實時消息——我很高興被刪除的用戶在下一次請求時返回到登錄頁面。 SignalR 在這種情況下感覺有點矯枉過正。

Request.User.Identity.IsAuthenticated在他們的 session 期間保持為真,即使他們的帳戶已從后備存儲中刪除。

我的想法是在基礎 controller 上覆蓋OnActionExecutingAsync()並在每次請求時檢查后備存儲中的有效記錄,然后采取適當的措施(例如注銷 + 重定向到登錄),但這感覺像是執行的重大開銷每個請求,特別是因為后備存儲是 CosmosDb,這將花費額外的請求單位。

我還需要考慮 AJAX 請求,因為 MVC 應用程序中的重要頁面具有動態元素,並且用戶可能會長時間停留在單個頁面上。

檢查他們的用戶帳戶是否在下次請求時被刪除的最有效、最輕量級的方法是什么?

你是對的,檢查每個請求是低效的。 由於您提到管理員希望能夠手動刪除,因此刪除和強制注銷之間的幾秒鍾延遲不會成為問題(這與幾秒鍾后刪除相同)。

在定義您使用的是 .NET Core Identity 后,您可以簡單地定義SecurityStampValidatorOptions ,例如

services.Configure<SecurityStampValidatorOptions>(options =>
{
    options.ValidationInterval = TimeSpan.FromMinutes(1);
});

這會導致每分鍾驗證一次用戶令牌。 如果將ValidationInterval設置為.FromMinutes(0) ,則會在每次請求時驗證令牌(我認為這就像 3 個數據庫調用進行驗證)。 我的建議是不要將0作為一個值,而是一個您認為對於手動刪除用戶和他被強制退出應用程序之間的時間跨度可以接受的值。

暫無
暫無

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

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