我在 Blazor 服务器端版本 8 中使用 ASP.NET Core Identity 库。
该库提供了一个页面供用户从系统中删除自己。当它们被删除时 - 它不会删除它们拥有的任何声明。
如何让它删除任何关联的声明?
ASP.NET 身份库 - 删除用户并不会删除其声明
图书馆提供了一个页面,供用户从图书馆中删除自己 系统。当它们被删除时 - 它不会删除它们的任何声明 有。
如果您可以分享您如何尝试删除用户的现有代码,那就更好了。
因为,在 ASP.NET Core Identity 中,当您删除用户时,默认情况下不会自动删除关联的声明。如果您想与用户一起删除声明,您可以通过扩展 UserManager 类来覆盖默认行为。
如何让它删除任何关联的声明?
为了首先删除用户声明,我们需要注入
UserManager
服务,其中我们有 RemoveClaim,它实际上删除了声明。
然后,我们必须检索用户的声明,使用循环单独删除它们,最后删除用户 - 这可以确保当用户在 ASP.NET Core Identity 应用程序中删除时,所有关联的声明都被删除。
请记住正确配置
UserManager
,并考虑大量索赔的性能和数据完整性。
让我们看看如何在实践中实现:
@inject UserManager<ApplicationUser> _userManager
var userId = 123;
var claims = await _userManager.GetClaimsAsync(userId);
foreach (var claim in claims)
{
await _userManager.RemoveClaimAsync(userId, claim);
}
await _userManager.DeleteAsync(userId);
注意: 如前所述,必须在删除用户之前执行声明删除,并且如果您有自定义用户类,请确保将
IdentityUser
类替换为您的实际用户类型。另外,也请参考这个官方文档。