![](/img/trans.png)
[英]How to get logged-in user name in the constructor of a controller in 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.