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

前端之家收集整理的这篇文章主要介绍了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中的例子,这个例子中使用的一些方法不存在.

  1. // POST: /Users/Delete/5
  2. [HttpPost,ActionName("Delete")]
  3. [ValidateAntiForgeryToken]
  4. public async Task<ActionResult> DeleteConfirmed(string id)
  5. {
  6. if (ModelState.IsValid)
  7. {
  8. if (id == null)
  9. {
  10. return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
  11. }
  12.  
  13. var user = await context.Users.FindAsync(id);
  14. var logins = user.Logins;
  15. foreach (var login in logins)
  16. {
  17. context.UserLogins.Remove(login);
  18. }
  19. var rolesForUser = await IdentityManager.Roles.GetRolesForUserAsync(id,CancellationToken.None);
  20. if (rolesForUser.Count() > 0)
  21. {
  22.  
  23. foreach (var item in rolesForUser)
  24. {
  25. var result = await IdentityManager.Roles.RemoveUserFromRoleAsync(user.Id,item.Id,CancellationToken.None);
  26. }
  27. }
  28. context.Users.Remove(user);
  29. await context.SaveChangesAsync();
  30. return RedirectToAction("Index");
  31. }
  32. else
  33. {
  34. return View();
  35. }
  36. }

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

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

谢谢.

解决方法

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

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

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

  1. // POST: /Users/Delete/5
  2. [HttpPost,ActionName("Delete")]
  3. [ValidateAntiForgeryToken]
  4. public async Task<ActionResult> DeleteConfirmed(string id)
  5. {
  6. if (ModelState.IsValid)
  7. {
  8. if (id == null)
  9. {
  10. return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
  11. }
  12.  
  13. var user = await _userManager.FindByIdAsync(id);
  14. var logins = user.Logins;
  15. var rolesForUser = await _userManager.GetRolesAsync(id);
  16.  
  17. using (var transaction = context.Database.BeginTransaction())
  18. {
  19. foreach (var login in logins.ToList())
  20. {
  21. await _userManager.RemoveLoginAsync(login.UserId,new UserLoginInfo(login.LoginProvider,login.ProviderKey));
  22. }
  23.  
  24. if (rolesForUser.Count() > 0)
  25. {
  26. foreach (var item in rolesForUser.ToList())
  27. {
  28. // item should be the name of the role
  29. var result = await _userManager.RemoveFromRoleAsync(user.Id,item);
  30. }
  31. }
  32.  
  33. await _userManager.DeleteAsync(user);
  34. transaction.commit();
  35. }
  36.  
  37. return RedirectToAction("Index");
  38. }
  39. else
  40. {
  41. return View();
  42. }
  43. }

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

猜你在找的asp.Net相关文章