在我的网站上,我让管理员可以在不输入旧密码的情况下更改某人的密码。我做了以下事情:
userManager.RemovePassword(oldUser.Id);
userManager.AddPassword(oldUser.Id, newPassword);
但是,仅当newPassword字符串符合配置文件中设置的密码策略时,才会更改密码。当新密码不符合要求时,AddPassword似乎无声地失败。
除了明显的"手动程序&#34>之外,是否有一些简单的方法可以根据当前的政策检查密码是否有效。 (检查有多少个大/小写字符,有多少位数等)。我正在寻找像
这样的东西bool valid = IsPasswordValid("pass");
感谢。
答案 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*/
}