在我的 ASP.NET 核心MVC应用程序中,管理员可能希望从其组织中删除常规用户。当然,使用内置标识模型和UserManager<T>.DeleteAsync()
方法,这是微不足道的。
但是,用户当时可能会在多个设备上登录。我不需要实时消息 - 我很高兴删除的用户在下次请求时返回到登录页面。对于这种情况,SignalR 感觉有点矫枉过正。
Request.User.Identity.IsAuthenticated
在其会话期间保持不变,即使他们的帐户已从后备存储中删除。
我的思考过程是覆盖基本控制器上的OnActionExecutingAsync()
,并在每次请求时检查后备存储中的有效记录,然后采取适当的操作(例如注销 + 重定向到登录(,但这感觉像是在每个请求上执行的大量开销,特别是因为后备存储是 CosmosDb,这将花费额外的请求单位。
我还需要考虑 AJAX 请求,因为 MVC 应用程序中的重要页面具有动态元素,用户可能会长时间停留在单个页面上。
检查其用户帐户是否已在下次请求时被删除的最有效、最轻量级的方法是什么?
你是对的,检查每个请求是低效的。由于您提到管理员希望能够手动删除,因此删除和强制注销之间的几秒钟延迟不会成为问题(这与几秒钟后删除相同(。
定义使用 .NET Core 标识后,可以简单地定义SecurityStampValidatorOptions
,例如
services.Configure<SecurityStampValidatorOptions>(options =>
{
options.ValidationInterval = TimeSpan.FromMinutes(1);
});
这会导致每分钟验证一次用户令牌。如果将ValidationInterval
设置为.FromMinutes(0)
,则在每个请求时都会验证令牌(我认为这就像 3 个数据库调用进行验证(。我的建议是不要将0
视为值,而是您认为在手动删除用户和强制退出应用程序之间的时间跨度内可接受的值。