【问题标题】:How to delete users that were created with UserManager.CreateAsync如何删除使用 UserManager.CreateAsync 创建的用户
【发布时间】:2025-12-05 01:40:01
【问题描述】:

使用 asp.net mvc5,我的用户管理系统似乎可以工作。我可以用谷歌或名字/密码登录..

但现在我正在开发一个用户管理界面,我需要能够在其中删除现有用户。这开始向我展示用户管理系统是多么令人困惑。与用户打交道有很多不同的方法......其中一些不起作用。

我读到的大多数地方都在谈论使用 Membership.DeleteUser()。

但这不起作用...

用户是用创建的。

var user = new ApplicationUser()
{
   UserName = model.UserName,
   Email = model.Email,
   ConfirmationToken = confirmationToken,
   IsConfirmed = false
};
var result = await UserManager.CreateAsync(user, model.Password);

现在稍后......我如何删除这样的用户? (给定它的名称或用户 ID)

我已经尝试了各种搜索中出现最多的内容.. 提出了会员资格作为解决方案。但这肯定不适合 MVC5? 例如

var allusers = Membership.GetAllUsers();  // allusers is empty
bool success = Membership.DeleteUser(model.name); // <-- success = false

我可以使用这种方法获得所有用户..

ApplicationDbContext db = new ApplicationDbContext();
foreach (var user in db.Users) { ... }

我可以找到一个个人用户......

ApplicationDbContext db = new ApplicationDbContext();
var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
ApplicationUser user = um.FindById(model.userId);

现在我该如何删除一个呢? ....

【问题讨论】:

  • 哦...然后按预期工作..在这个版本中。
  • 所以 UserStore 可能是完成此任务的正确方法......稍后实现。就像是。 var um = new UserManager(new UserStore(db)); var us = new UserStore(db); ApplicationUser 用户 = um.FindById(model.userId); us.DeleteAsync(user);

标签: c# asp.net asp.net-mvc-5


【解决方案1】:

更新

从 Microsoft.AspNet.Identity 版本 2.0.0.0 开始,您现在可以使用 UserManager.Delete(user); 删除具有 Identity 的用户。


为了后代

您指的是两个不同的东西,身份和成员资格。较新版本的 ASP.NET 支持 Identity 和 Membership,其中 Identity 是默认设置,而旧版本仅支持 Membership(在这两个身份验证系统之外)。

当您使用UserManager.CreateAsync 创建用户时,您是在Microsoft.AspNet.Identity 命名空间内进行的。当您尝试使用Membership.DeleteUser 删除用户时,您是在System.Web.Security 命名空间内执行此操作。他们生活在两个不同的世界中。

正如另一条评论提到的,deleting users is not yet supported out of the box by Identity,但它是is the first item on their roadmap for a Spring of 2014 release

但是为什么要等呢?像这样向 ApplicationUser 模型添加另一个属性:

public class ApplicationUser : IdentityUser
{
    public string IsActive { get; set; }
}

然后,在您的控制器中删除用户:

user.IsActive = false;

在用户登录时进行检查:

if (user.IsActive == false)
{
    ModelState.AddModelError(String.Empty, "That user has been deleted.");
    return View(model);
}

当已删除的用户尝试重新注册时,请在注册页面上使用 UserManager.Update 而不是 UserManager.Create 和他们的新信息。

这些步骤将有效地删除用户。如果你真的必须从你的数据库中清除他们的信息,you can use Entity Framework to do that more directly

【讨论】:

    【解决方案2】:

    添加到上一个响应中。如果你有

    public class ApplicationUser : IdentityUser
    {
        public string IsActive { get; set; }
    }
    

    然后,在您的控制器中删除用户:

    user.IsActive = false.ToString();
    

    因为你的数据类型是字符串而不是布尔值

    【讨论】:

      最近更新 更多