如何删除我的身份用户



我正在尝试删除重复但聪明的用户,他们已经发现可以使用多封电子邮件创建帐户。我的应用程序有一个UserLog,这是我通过网站跟踪用户以进行风险管理的一种方式。这是我的UserLog类:

public class UserLog
{
public int Id { get; set; }
public ApplicationUser Customer { get; set; }
public DateTime LogDate { get; set; }
}

在我的ManageUsers控制器中,我知道在删除用户之前需要删除用户创建的日志,因为我在类中创建了FK_constraint。最后,我尝试删除该用户。以下是我尝试过的:

public ActionResult Delete(string UserName)
{
var ocustomerId = User.Identity.GetUserId();
var oCustomer = _context.Users.Single(u => u.Id == ocustomerId).ToString();
//delete user logs
_context.UserLogs
.Where(p => p.Customer.Id == oCustomer)
.ToList()
.ForEach(p => _context.UserLogs.Remove(p));
_context.SaveChanges();
//finally delete from aspnetUsers table
var thisUser =
_context.Users.FirstOrDefault(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase));
_context.Users.Remove(thisUser);
_context.SaveChanges(); \it breaks here
return RedirectToAction("Index");
}

正如预期的那样,代码的第一部分按预期工作,删除了用户创建的日志。错误发生在第二个context.SaveChanges()上。

断点生成的错误为:

EntityFramework.dll 中发生DbUpdateException错误

然而,在实际错误页面上生成的错误如下:

DELETE语句与REFERENCE约束"FK_dbo.UserLogs_dbo.AspNetUsers_Customer_Id"冲突。发生冲突在数据库"myDB"的表"dbo.UserLogs"的列"Customer_Id"中。这个语句已终止。

您删除当前登录用户的日志:

var ocustomerId = User.Identity.GetUserId();
var oCustomer = _context.Users.Single(u => u.Id == ocustomerId).ToString();

但稍后您将尝试通过UserName从方法参数中删除用户。我怀疑UserName是否等于当前登录的用户。

首先,将用户id传递给方法。通过此id检索用户,然后删除条目

public ActionResult Delete(string UserName)
{
var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = userManager.FindByName(UserName);
_context.UserLogs
.Where(p => p.Customer.Id == user.Id)
.ToList()
.ForEach(p => _context.UserLogs.Remove(p));
_context.SaveChanges(); 
userManager.Delete(user);
return RedirectToAction("Index");
}

顺便说一句,不要调用SaveChanges两次。

相关内容

  • 没有找到相关文章

最新更新