我通过派生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
将验证活动用户而不是已删除用户?
答案 0 :(得分:2)
您可以执行以下操作:
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();