재우니의 블로그

 

 

 

asp.net identity 의 PasswordValidator 를 사용하면 언어가 영문판이다 ㅡㅡ;

이를 custom 해서 한글로 치환하는 방법말곤 없다.

다른 방법이 있으면 댓글로 ~~ ㅎㅎ

 

이를 사용할려면 IdentityConfig.cs 를 수정해야겠지요?


            manager.PasswordValidator = new CustomPasswordValidator 
            { }

 

public class CustomPasswordValidator : PasswordValidator
    {
        public const int RequiredPasswordLength = 6;

        public CustomPasswordValidator()
        {
            RequiredLength = RequiredPasswordLength;
            RequireNonLetterOrDigit = false;
            RequireDigit = true;
            RequireLowercase = true;
            RequireUppercase = false;
        }

        public override Task<IdentityResult> ValidateAsync(string item)
        {
            if (item == null) throw new ArgumentNullException("item");
            var list = new List<string>();

            if (string.IsNullOrWhiteSpace(item) || item.Length < RequiredLength)
            {
                list.Add(PasswordValidatorCodes.PasswordTooShort);
            }

            if (RequireNonLetterOrDigit && item.All(IsLetterOrDigit))
            {
                list.Add(PasswordValidatorCodes.PasswordRequireNonLetterOrDigit);
            }

            if (RequireDigit && item.All(c => !IsDigit(c)))
            {
                list.Add(PasswordValidatorCodes.PasswordRequireDigit);
            }

            if (RequireLowercase && item.All(c => !IsLower(c)))
            {
                list.Add(PasswordValidatorCodes.PasswordRequireLower);
            }

            if (RequireUppercase && item.All(c => !IsUpper(c)))
            {
                list.Add(PasswordValidatorCodes.PasswordRequireUpper);
            }

            return Task.FromResult(list.Count == 0
                ? IdentityResult.Success
                : new IdentityResult(list));
        }
    }

    public static class PasswordValidatorCodes
    {
        public const string ErrorCodePrefix = "CustomPassword";
        public const string PasswordTooShort = ErrorCodePrefix + "TooShort";
        public const string PasswordRequireNonLetterOrDigit = ErrorCodePrefix + "RequireNonLetterOrDigit";
        public const string PasswordRequireDigit = ErrorCodePrefix + "RequireDigit";
        public const string PasswordRequireLower = ErrorCodePrefix + "RequireLower";
        public const string PasswordRequireUpper = ErrorCodePrefix + "RequireUpper";

        public static string GetLocalizedMessageForCode(string code)
        {
            switch (code)
            {
                case PasswordTooShort:
                    return string.Format("패스워드 길이를 {0}자 이상 입력해 주세요.", CustomPasswordValidator.RequiredPasswordLength);                  
                case PasswordRequireNonLetterOrDigit:
                    return "영문자 또는 숫자를 입력해 주세요.";
                case PasswordRequireDigit:
                    return "숫자를 입력해 주세요.";
                case PasswordRequireLower:
                    return "영문 소문자를 입력해 주세요.";
                case PasswordRequireUpper:
                    return "영문 대문자를 입력해 주세요.";
                default:
                    throw new ArgumentException("code");
            }
        }
    }