微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc – ASP.NET MVC 5如何在Identity 2.0中删除用户及其相关数据

嗨,我正在关注本文删除Identity 2.0中的用户
http://www.asp.net/mvc/tutorials/mvc-5/introduction/examining-the-details-and-delete-methods

但是,我需要先删除AspNetUserRoles中的所有相关记录,然后删除用户.

我发现一个写在Identity 1.0中的例子,这个例子中使用的一些方法不存在.

// POST: /Users/Delete/5
        [HttpPost,ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> DeleteConfirmed(string id)
        {
            if (ModelState.IsValid)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }

                var user = await context.Users.FindAsync(id);
                var logins = user.Logins;
                foreach (var login in logins)
                {
                    context.UserLogins.Remove(login);
                }
                var rolesForUser = await IdentityManager.Roles.GetRolesForUserAsync(id,CancellationToken.None);
                if (rolesForUser.Count() > 0)
                {

                    foreach (var item in rolesForUser)
                    {
                        var result = await IdentityManager.Roles.RemoveUserFromroleAsync(user.Id,item.Id,CancellationToken.None);
                    }
                }
                context.Users.Remove(user);
                await context.SaveChangesAsync();
                return RedirectToAction("Index");
            }
            else
            {
                return View();
            }
        }

我从任何地方找不到“IdentityManager”,context.Users也没有FindAsync()方法.

请帮忙弄清楚如何在Identity 2.0中正确删除用户及其相关记录

谢谢.

解决方法

我认为你正在寻找的课程是 UserManagerRoleManager.在我看来,他们是更好的方式,而不是直接反对上下文.

UserManager定义了一个方法RemoveFromRoleAsync,它允许您从给定角色中删除用户(由他的密钥识别).它还定义了几种查找方法,例如FindAsync,FindByIdAsync,FindByNameAsyncFindByEmailAsync.它们都可以用于检索用户.要删除用户,您应该使用接受用户对象作为参数的DeleteAsync方法.要获取用户是Identity的成员角色,您可以通过GetRolesAsync方法传递用户的ID.此外,我看到您正在尝试从用户删除登录.为此,您应该使用RemoveLoginAsync方法.

所有代码中的所有代码将类似于以下代码

// POST: /Users/Delete/5
[HttpPost,ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> DeleteConfirmed(string id)
{
  if (ModelState.IsValid)
  {
    if (id == null)
    {
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }

    var user = await _userManager.FindByIdAsync(id);
    var logins = user.Logins;
    var rolesForUser = await _userManager.GetRolesAsync(id);

    using (var transaction = context.Database.BeginTransaction())
    {
      foreach (var login in logins.ToList())
      {
        await _userManager.RemoveLoginAsync(login.UserId,new UserLoginInfo(login.LoginProvider,login.ProviderKey));
      }

      if (rolesForUser.Count() > 0)
      {
        foreach (var item in rolesForUser.ToList())
        {
          // item should be the name of the role
          var result = await _userManager.RemoveFromroleAsync(user.Id,item);
        }
      }

      await _userManager.DeleteAsync(user);
      transaction.commit();
    }

    return RedirectToAction("Index");
  }
  else
  {
    return View();
  }
}

您需要根据需要调整此片段,因为我不知道IdentityUser实现如何.请记住根据需要声明UserManager.在Visual Studio中使用个人帐户创建新项目时,可以找到一个可以做到这一点的示例.

原文地址:https://www.jb51.cc/aspnet/250798.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐