【问题标题】:MVC Identity validate user name and password along with custom propertyMVC 身份验证用户名和密码以及自定义属性
【发布时间】:2019-01-30 07:58:36
【问题描述】:

我通过派生IdentityUser 添加了一个自定义属性IsDeleted

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

【问题讨论】:

  • 可能验证没有重复,基于其他字段,例如电子邮件,因为它不应该与其他用户相同?只是一个想法
  • 用户名是唯一的,不能有两行相同的用户名
  • @JephrenNaicker 但假设我正在尝试创建相同的用户
  • @NitinSawant 但假设我正在尝试创建相同的用户

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


【解决方案1】:

你可以这样做:

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

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2011-10-23
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2014-05-10
    相关资源
    最近更新 更多