我通过派生IsDeleted
添加了自定义属性IdentityUser
public class AppUser : IdentityUser
{
public int IsDeleted { get; set; }
}
目前,我正在尝试使用以下代码验证用户提供的用户名和密码。
var userManager = HttpContext.GetOwinContext().GetUserManager<AppUserManager>();
AppUser user = userManager.Find(userDetails.UserName, userDetails.Password);
假设在这里,我创建了一个用户名为"abc@xyz.com"的用户,然后删除了该用户。当我删除用户时,IsDeleted
属性将设置为 1。
后来,我创建了另一个或相同的用户名"abc@xyz.com"的用户,后一个用户在系统中处于活动状态。
如何确保userManager.Find
将验证活动用户而不是已删除的用户?
您可以执行以下操作:
AppUser user = userManager.Users.Where(u => u.UserName == userDetails.UserName && u.IsDeleted != 1)
.FirstOrDefault();
如果您需要在检查中包含密码,那么您可以执行以下操作:
var userHashedPassword = new PasswordHasher().HashPassword(userDetails.Password);
AppUser user = userManager.Users.Where(u => u.UserName == userDetails.UserName &&
u.PasswordHash == userHashedPassword && u.IsDeleted != 1).FirstOrDefault();