Що я хотів зробити, це налаштувати правило пароля таким чином, щоб воно містило символи принаймні 2 з наступних груп: малі регістри, великі регістри, цифри та спеціальні символи .
Це не те, що я міг би зробити, просто змінивши параметри PasswordValidator:
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = false,
RequireDigit = false,
RequireLowercase = false,
RequireUppercase = false,
};
Тому натомість я створив власний валідатор, розширивши IIdentityValidator ...
Спочатку створіть новий файл CustomPasswordValidator.cs у папці Розширення:
public class CustomPasswordValidator : IIdentityValidator<string>
{
public int RequiredLength { get; set; }
public CustomPasswordValidator(int length) {
RequiredLength = length;
}
public Task<IdentityResult> ValidateAsync(string password) {
if (String.IsNullOrEmpty(password) || password.Length < RequiredLength)
{
return Task.FromResult(IdentityResult.Failed(
String.Format("Password should be at least {0} characters", RequiredLength)));
}
int counter = 0;
List<string> patterns = new List<string>();
patterns.Add(@"[a-z]");
patterns.Add(@"[A-Z]");
patterns.Add(@"[0-9]");
patterns.Add(@"[!@#$%^&*\(\)_\+\-\={}<>,\.\|""'~`:;\\?\/\[\] ]");
foreach (string p in patterns)
{
if (Regex.IsMatch(password, p))
{
counter++;
}
}
if (counter < 2)
{
return Task.FromResult(IdentityResult.Failed(
"Please use characters from at least two of these groups: lowercase, uppercase, digits, special symbols"));
}
return Task.FromResult(IdentityResult.Success);
}
}
Потім перейдіть до IdentityConfig.cs і ініціалізуйте його методом Create:
manager.PasswordValidator = new CustomPasswordValidator(8 );
Докладніше див. У моєму посібнику .