Co chciałem zrobić było dostosować hasło tak, aby zawierał znaki z co najmniej 2 z następujących grup: małe litery, wielkie litery, cyfry i symbole specjalne.
To nie jest coś, co mogę zrobić tylko przez zmianę opcji PasswordValidator:
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = false,
RequireDigit = false,
RequireLowercase = false,
RequireUppercase = false,
};
Zamiast więc stworzyłem niestandardowy walidator rozszerzając IIdentityValidator ...
Najpierw utwórz nowy plik CustomPasswordValidator. CS w folderze extensionMethods:
public class CustomPasswordValidator : IIdentityValidator<string>
{
public int RequiredLength { get; set; }
public CustomPasswordValidator(int length) {
RequiredLength = length;
}
public Task<IdentityResult> ValidateAsync(string item) {
if (String.IsNullOrEmpty(item) || item.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]"); // lowercase
patterns.Add(@"[A-Z]"); // uppercase
patterns.Add(@"[0-9]"); // digits
patterns.Add(@"[[email protected]#$%^&*\(\)_\+\-\={}<>,\.\|""'~`:;\\?\/\[\]]"); // special symbols
foreach (string p in patterns)
{
if (Regex.IsMatch(item, p)) {
counter++;
}
}
if (counter < 2)
{
return Task.FromResult(IdentityResult.Failed(
"Please use characters from at least two of these groups: lowercase, uppercase, digit, secial"));
}
return Task.FromResult(IdentityResult.Success);
}
}
następnie przejść do IdentityConfig.cs i zainicjować w Tworzenie metody:
manager.PasswordValidator = new CustomPasswordValidator(6);
/*
// You don't need this anymore
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
};
*/
Tak lub możesz bezpośrednio wywoływać usługi. Konfiguruj tożsamość (o => {}); –
Nice! Czy myślisz, że jest to możliwe poprzez plik 'config.json'? –
@DaveVandenEynde Właśnie próbowałem. Nie działał. json poniżej. "Tożsamość": { "Hasło": { "RequireDigit": "false", "RequireLowercase": "false", "RequiredLength": "5", "RequireUppercase": "false", "RequireNonLetterOrDigit": "false" } } } – nVentimiglia