使用ASP.NET Identity 2检查密码是否有效

时间:2016-05-10 16:59:59

标签: asp.net asp.net-identity

在我的网站上,我让管理员可以在不输入旧密码的情况下更改某人的密码。我做了以下事情:

userManager.RemovePassword(oldUser.Id);
userManager.AddPassword(oldUser.Id, newPassword);

但是,仅当newPassword字符串符合配置文件中设置的密码策略时,才会更改密码。当新密码不符合要求时,AddPassword似乎无声地失败。

除了明显的"手动程序&#34>之外,是否有一些简单的方法可以根据当前的政策检查密码是否有效。 (检查有多少个大/小写字符,有多少位数等)。我正在寻找像

这样的东西
bool valid = IsPasswordValid("pass");

感谢。

4 个答案:

答案 0 :(得分:20)

您可以使用PasswordValidator.ValidateAsync()方法确定密码是否符合UserManager中定义的条件:

var valid = (await UserManager.PasswordValidator.ValidateAsync("pass")).Succeeded;

答案 1 :(得分:1)

您可以简单地使用PasswordValidator来检查密码的有效性和错误,如下所示:

        var passwordValidator = new PasswordValidator<IdentityUser>();
        var result = await passwordValidator.ValidateAsync(_userManager, null, "your password here");

        if (result.Succeeded)
        {
            // Valid Password
        }
        else
        {
            // Check the error messages in result.Errors
        }

上述解决方案适用于Asp.Net Core 2.2

答案 2 :(得分:0)

在Net.Core 2.2中,我做到了。我使用整个应用程序中的标准机制通过JSON将错误发送回时,将错误收集到字符串列表中。感谢cularbytes

        List<string> passwordErrors = new List<string>();

        var validators = _userManager.PasswordValidators;

        foreach(var validator in validators)
        {
            var result = await validator.ValidateAsync(_userManager, null, newPassword);

            if (!result.Succeeded)
            {
                foreach (var error in result.Errors)
                {
                    passwordErrors.Add(error.Description);   
                }
            }
        }

答案 3 :(得分:-6)

你可以使用正则表达式,其中'password'是用户输入,表达式是你的密码规则,你可以在这里找到一些正则表达式的例子

http://web.ontuts.com/snippets/10-expresiones-regulares-imprescindibles-en-desarrollo-web/

if (System.Text.RegularExpressions.Regex.IsMatch(password, expression))
{
      /*do something*/
}
else
{
    /*do something invalid password*/
}