Asp.net mvc 将当前密码与数据库密码进行比较ASP.NET MVC和DataAnnotations

Asp.net mvc 将当前密码与数据库密码进行比较ASP.NET MVC和DataAnnotations,asp.net-mvc,Asp.net Mvc,如何将用户的CurrentPassword与数据库中存储的密码进行比较 我想让我的当前密码与我的数据库密码进行比较,但我该如何做呢?数据库密码由MD5加密 public async Task<IActionResult> ChangePassword(ChangePasswordVM changePasswordVM, string returnUrl = null) { LeaveUser _User = await _userManager.Get

如何将用户的
CurrentPassword
与数据库中存储的密码进行比较

我想让我的当前密码与我的数据库密码进行比较,但我该如何做呢?数据库密码由MD5加密

    public async Task<IActionResult> ChangePassword(ChangePasswordVM changePasswordVM, string returnUrl = null)
    {
        LeaveUser _User = await _userManager.GetUserAsync(User);
        if (ModelState.IsValid)
        {
            var result = await _userManager.ChangePasswordAsync(_User, changePasswordVM.CurrentPassword, changePasswordVM.ConfirmNewPassword);
            if (result.Succeeded)
            {
                if (returnUrl == null)
                    return RedirectToAction("Index", "Home");
                else
                    return LocalRedirect(returnUrl);
            }
            ModelState.AddModelError("", "Invalid Password Change Attempt.");
        }
        return View();
    }

    [Required(ErrorMessage = "Please enter Current Password")]
    [DataType(DataType.Password)]
    [Display(Name = "Current Password : ")]
    public string CurrentPassword { get; set; }

    [Required(ErrorMessage = "Please enter New Password")]
    [MinLength(8), MaxLength(20)]
    [DataType(DataType.Password)]
    [Display(Name = "New Password : ")]
    public string NewPassword { get; set; }

    [Required(ErrorMessage = "Please confirm Password")]
    [MinLength(8), MaxLength(20)]
    [DataType(DataType.Password)]
    [Compare("NewPassword", ErrorMessage = "The password does not match the confirmation password.")]
    [Display(Name = "Confirm New Password : ")]
    public string ConfirmNewPassword { get; set; }
public异步任务ChangePassword(ChangePasswordVM ChangePasswordVM,string returnUrl=null)
{
LeaveUser\u User=wait\u userManager.GetUserAsync(用户);
if(ModelState.IsValid)
{
var result=wait _userManager.ChangePasswordAsync(_User,changePasswordVM.CurrentPassword,changePasswordVM.ConfirmNewPassword);
if(result.successed)
{
if(returnUrl==null)
返回重定向到操作(“索引”、“主页”);
其他的
返回LocalRedirect(returnUrl);
}
AddModelError(“,“密码更改尝试无效”);
}
返回视图();
}
[必需(ErrorMessage=“请输入当前密码”)]
[数据类型(数据类型.密码)]
[显示(Name=“当前密码:”)]
公共字符串CurrentPassword{get;set;}
[必需(ErrorMessage=“请输入新密码”)]
[最小长度(8),最大长度(20)]
[数据类型(数据类型.密码)]
[显示(Name=“新密码:”)]
公共字符串NewPassword{get;set;}
[必需(ErrorMessage=“请确认密码”)]
[最小长度(8),最大长度(20)]
[数据类型(数据类型.密码)]
[比较(“NewPassword”,ErrorMessage=“密码与确认密码不匹配。”)]
[显示(Name=“确认新密码:”)]
公共字符串ConfirmNewPassword{get;set;}

但我的主要问题是,我想让当前密码与服务器端密码进行比较,这样用户就不能在当前密码上输入任何随机密码,并且仍然要更改密码。好的,我想你要做的就是检查用户更改密码时,他们不应该等于当前密码。但是,如果要将
CurrentPassword
与数据库中的密码进行比较,则。。。什么也不做。默认控制器已经做到了这一点。如果您自己编写了更改密码代码,那么您的问题将显示该代码。发布我的控制器代码,目前它不会更改密码。它什么也不做。[Remote(“CheckSamePasswordAsExisting”,“Validation”)][Display(Name=“New Password:”)]public string NewPassword{get;set;}创建控制器名称验证和名为checkSamePasswordAsisting usermanager.FindAsync的方法。使用用户名和输入的新密码。如果它返回null,则表示输入的密码不是现有密码。它不是加密的,但实际上是用MD5散列的-这意味着您无法“解密”它,因此您所能做的就是获取当前密码,并将其与MD5散列,然后比较散列值。