おそらく、今朝のgooglinのスキルはそれほど優れていませんが、個々のユーザーアカウントを使用する新しいasp.net mvc5プロジェクトで(最小/最大長ではなく)異なるパスワード要件を設定する方法を見つけることができないようです。
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
私はまだどのパスワード要件を実行したいのかわかりませんが、おそらく最小長と小文字、大文字、数字の組み合わせが必要です。
どのようにこれを達成することができますか?
RegularExpressionAttribute をこの回答のルールと一緒に使用できます。
App_Start\IdentityConfig.cs
でパスワード要件を設定できます
// Configure validation logic for passwords
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 4,
RequireNonLetterOrDigit = false,
RequireDigit = false,
RequireLowercase = false,
RequireUppercase = false,
};
別のオプションは、IIdentityValidator<string>
の実装を作成し、それをPasswordValidator
のUserManager
プロパティに割り当てることです。メソッドにはValidateAsync
が1つしかありません。そこで、任意の種類のパスワード検証を定義できます。クライアント側の検証ですが、私はこれをやって来る人のための代替としてそこに置くと思っただけです。
例えば.
public class CustomPasswordValidator : IIdentityValidator<string>
{
public int MinimumLength { get; private set; }
public int MaximumLength { get; private set; }
public CustomPasswordValidator(int minimumLength, int maximumLength)
{
this.MinimumLength = minimumLength;
this.MaximumLength = maximumLength;
}
public Task<IdentityResult> ValidateAsync(string item)
{
if (!string.IsNullOrWhiteSpace(item)
&& item.Trim().Length >= MinimumLength
&& item.Trim().Length <= MaximumLength)
return Task.FromResult(IdentityResult.Success);
else return Task.FromResult(IdentityResult.Failed("Password did not meet requrements."));
}
}
/*Passwords must be at least min. 8 and max. 16 characters in length,
minimum of 1 lower case letter [a-z] and
a minimum of 1 upper case letter [A-Z] and
a minimum of 1 numeric character [0-9] and
a minimum of 1 special character: $ @ $ ! % * ? & + = #
PASSWORD EXAMPLE : @Password1
*/
pass = TextBoxPss1.Text;
Regex regex = new Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&+=#]) [A-Za-z\\d$@$!%*?&+=#]{8,16}$");
Match match = regex.Match(pass);
if (match.Success)
{TextBoxPss1.Text = "OK" }