如何删除使用UserManager.CreateAsync创建的用户

时间:2014-02-02 03:42:14

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

使用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);

现在如何删除一个? ....

2 个答案:

答案 0 :(得分:17)

<强>更新

从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.Create时,请在注册页面上使用UserManager.Update及其新信息。

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

答案 1 :(得分:3)

添加到之前的回复中。如果你有

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

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

user.IsActive = false.ToString();

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