MVC身份验证用户名和密码以及自定义属性

时间:2019-01-30 07:58:37

标签: c# asp.net-mvc authentication asp.net-identity

我通过派生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将验证活动用户而不是已删除用户?

1 个答案:

答案 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();